Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Mikä kieli/ohjelma - tekstipohjainen peli

Sivun loppuun

ZuBer [27.08.2011 21:11:59]

#

Moi!

Aion tehdä pelin, joka toimii pelkällä tekstillä. Grafiikkaa ei ole. Olen nähnyt sellaisia. Niissä on musta pohja ja teksti valkoista. Ohjaus toimii ehkä pelkästään näppäimillä. Eli niissä on aina vaihtoehtoja, joka valitaan...

Millä kielellä/ohjelmalla tälläisiä simppeleitä pelejä saa aikaan?(jos saa)

Grez [27.08.2011 21:13:56]

#

ZuBer kirjoitti:

Millä kielellä/ohjelmalla tälläisiä simppeleitä pelejä saa aikaan?(jos saa)

Millä tahansa / useammalla kuin graafisia.

VB6 on ehkä tällä palstalla usein puheena olevista kielistä ainoa, jolla ei ole suorastaan helppoa tehdä komentoriviohjelmia. Mutta sillähän ei kukaan täysjärkinen aloita muutenkaan uutta projektia ja esim. VB.Netilläkin komentoriviohjelmat onnistuu vaivatta.

Deffi [27.08.2011 21:19:58]

#

C tai C++ kun siinä on goto millä on helppo tehdä tekstiseikkailu.

Antti Laaksonen [27.08.2011 21:21:16]

#

Python voisi olla yksi hyvä valinta. Sillä voi koodata tekstiseikkailun tähän tapaan:

print "Mitä haluat tehdä seuraavaksi?"
print "1. Mene kouluun"
print "2. Mene kauppaan"
print "3. Mene puistoon"
valinta = raw_input("Anna valinta: ")
if valinta == "1":
    print "Tulit myöhässä ja sait jälki-istuntoa."
if valinta == "2":
    print "Ostit kaupasta suklaapatukan."
if valinta == "3":
    print "Löysit maasta lompakon, jossa on rahaa."

Ohjelmointiputkan Python-opas kertoo lisää:

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=python_01

ZuBer [27.08.2011 21:30:58]

#

Voiko Pythonilla luoda sovelluksia, jotka toimivat kaikissa normaaleissa koneissa ilman lisäasennuksia? Esim. VB:llä luotu ohjelma tarvitsi jonkun ladattavan jutun toimiakseen...

Grez [27.08.2011 21:34:32]

#

http://www.py2exe.org/

Tosin ihan samalla tavalla siinä tulee sen .exe:n lisäksi tiedostoja jotka tarvii jakaa sen exen mukana.

VB.Netillä tehty ohjelma ei vaadi välttämättä muuta kuin .Net -frameworkin joka on vakiona jokaisessa nykyisessä Windowissa (ainakin jos käytät vanhempia versioita), eli jos ei käytä erikoisempia kirjastoja, niin yleensä riittää ihan pelkän .exe:n levittäminen.

jlaire [27.08.2011 21:48:25]

#

Lasketaanko liinuksit ja mäkit normaaleiksi koneiksi?

Metabolix [27.08.2011 21:50:24]

#

Suosittelen HTML-sivua ja JavaScriptia. Tekstilaatikon voi tyylitellä näyttämään komentorivi-ikkunalta, eikä numeronäppäinten lukeminen ole kovin hankalaa. Toisaalta pienemmällä vaivalla voi tehdä klikattavat napit tai radiovalinnan vaihtoehtojen eteen.

Suurin syy kielivalinnalle on helppo levitys.

Grez [27.08.2011 21:52:23]

#

jlaire kirjoitti:

Lasketaanko liinuksit ja mäkit normaaleiksi koneiksi?

No oletin että tarkoitettin Windowsia jos kerran VB toimi muuten mutta "tarvitsi jonkun ladattavan jutun"

Lebe80 [27.08.2011 23:02:00]

#

Tee php:lla tekstiseikkailu. Webipohjaisena (html-sivuna) sen pitäisi toimia kaikilla laitteilla, jopa mobiilisti.

Blaze [28.08.2011 01:26:54]

#

ZuBer kirjoitti:

Voiko Pythonilla luoda sovelluksia, jotka toimivat kaikissa normaaleissa koneissa ilman lisäasennuksia? Esim. VB:llä luotu ohjelma tarvitsi jonkun ladattavan jutun toimiakseen...

Python pyörähtää suorilta, mut VB tarvis jotain ihme säätöä. Terveisin: linuxisti.

jlaire [28.08.2011 06:29:05]

#

Mietin vaan, että ZuBer ei välttämättä tiennyt VB:n rajoituksista. Jos haluaa jakaa omia ohjelmia omppulaitteita käyttäville kavereillekin, se pitää ottaa huomioon jo kieltä valittaessa.

JavaScript voisi olla ihan hyvä valinta. Sanoisin että sen kanssa alkuun pääseminen on hankalampaa kuin Pythonin, koska HTML-sivu on huomattavasti monimutkaisempi kuin stdin/stdout, mutta toisaalta HTML:n ja CSS:n perusteet oppii kyllä muutamassa päivässä. JavaScriptiä voisi harjoitella aluksi vaikka selaimen konsolissa irrallaan DOM:sta; textarea herää sitten eloon parilla jQuery-loitsulla.

JavaScript vaatisi kyllä kohtalaisesti oma-aloitteisuutta. Tietoa joutunee yhdistämään muutamasta eri oppaasta/speksistä, ellei jostain löydy hyvää opasta joka lähtee tyhjästä ja keskittyy JavaScriptiin. Yleensähän tarkoituksena on lisätä toiminnallisuutta HTML-sivuille, eikä HTML-sivua käyttöliittymäksi JavaScriptille.

ZuBer [28.08.2011 09:53:37]

#

HTML pääosin hallussa ennestään. En lähde sillä tekemään. PHP:ssa taas se ongelma, että sen joutuu ladata nettiin, ja sieltä sitä pelataan.
Mielelläni tekisin exe:n. On kyllä jo sen verran kokemusta ohjelmoinnista, että Python lähtee suht nopeasti kulkemaan. Epäilen kyllä vähän, millaista ulkoasua sillä saa aikaan. Olisiko jollain kuvaa ym. pythonilla tehdystä ohjelmasta/pelistä?

//Tulostaako python aina peräkkäin nuo tekstit ym. kuten oppaissa (en ole vielä ladannut ohjelmointiympäristöä) vai voiko sen tehdä niin, että siinä näkyy aina kerralla vain yksi teksti? Meinaan sitä, että esim labyrintti ei piirry näin:

# # # # # #
# @ # #
#         #
#   # #   #
#         #
# # # # # #
Suunta (y/a/v/o): a
# # # # # #
#   # #
# @       #
#   # #   #
#         #
# # # # # #
Suunta (y/a/v/o): o
# # # # # #
#   # #
#   @     #
#   # #   #
#         #
# # # # # #
Suunta (y/a/v/o): o
# # # # # #
#   # #
#     @   #
#   # #   #
#         #
# # # # # #
Suunta (y/a/v/o): o
# # # # # #
#   # #
#       @ #
#   # #   #
#         #
# # # # # #
Suunta (y/a/v/o): y
# # # # # #
#   # # @
#         #
#   # #   #
#         #
# # # # # #
Suunta (y/a/v/o): o
# # # # # #
#   # #   @
#         #
#   # #   #
#         #
# # # # # #
Pääsit maaliin!

Vaan yksi ruutu kerrallaan...

///Oho, meni vähän rusinaksi tuo "labyrintti"...
Mod. edit: pannaan labyrintti kooditageihin, niin näkyy niinku tarkotettiin.

ErroR++ [28.08.2011 11:03:05]

#

Suosittelisin VB.NET:tiä. Itse teen sillä konsolissa toimivaa merkkigrafiikkapeliä. Siinä kyllä pitää olla mukana .NET Framework.

kinnala [28.08.2011 11:17:06]

#

ZuBer kirjoitti:

PHP:ssa taas se ongelma, että sen joutuu ladata nettiin, ja sieltä sitä pelataan.

PHP:ta voi ihan samalla tavalla ajaa komentorivillä kuin muitakin skriptikieliä.

ZuBer kirjoitti:

Tulostaako python aina peräkkäin nuo tekstit ym. kuten oppaissa

Komentokehotteen tyhjentäminen pitäisi onnistua kutsumalla käyttiksen CLS-komentoa.

os.system('cls')

Voit myös kokeilla tulostaa 100 riviä rivinvaihtoa ruudun tyhjentämiseksi. ;-) Parempi ratkaisu luolaseikkailun tekemiseksi olisi tietenkin käyttää jotain curses-tyylistä kirjastoa apuna.

Blaze [28.08.2011 11:30:49]

#

kinnala kirjoitti:

Komentokehotteen tyhjentäminen pitäisi onnistua kutsumalla käyttiksen CLS-komentoa.

blaze@nanoha ~ $ python
Python 2.7.1 (r271:86832, Mar 27 2011, 19:13:26)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system('cls')
sh: cls: command not found

Tai sitten ei.

kinnala kirjoitti:

Parempi ratkaisu luolaseikkailun tekemiseksi olisi tietenkin käyttää jotain curses-tyylistä kirjastoa apuna.

Tarkoitit paremmalla varmaan "ainoa oikea".

ZuBer [28.08.2011 11:45:50]

#

Suoritetaanko Python siis komentorivillä?

Yritän nyt tehdä jotain tämän(en ole testannut, mutta näyttää samalta mitä ajan takaa) tapaista ja ei tämäkään hirveästi suunnitelmistani poikkea. Toisaalta ei tämäkään niin pahalta näytä... Noita en ole siis testannut, mutta kuvien perusteella näyttää siltä, että jotakin tuollaista ajan takaa...
// http://www.jonneweb.net/pelit/file/421/areena-5/

kinnala [28.08.2011 11:46:27]

#

Blaze kirjoitti:

Tai sitten ei.

os.system(['clear','cls'][os.name == 'nt'])

@ZuBer
Areena 5 ei kyllä enää merkkigrafiikka-kategoriaan mene. Kannattaa tosiaan tutustua esim. tähän tai johonkin muuhun curses-implementaatioon, ottaen tietenkin huomioon tuettavat käyttöjärjestelmät. ;-)

ZuBer [28.08.2011 13:10:27]

#

Toimiiko VB.NET:issä jokin tietokanta, tekstitiedostosta luku yms... Eli saako pelin tallennuksen rakennettua?

Myös tuo Antti Laaksosen tekemä RavintolaBisnes on aika lailla sen tapainen mitä olen tekemässä. Sekin on siis bisnespeli, eikä siinä tarvitse olla "liikkuvia osia" siis esim. jotain ukkeleita yms...

Grez [28.08.2011 14:28:30]

#

ZuBer kirjoitti:

Toimiiko VB.NET:issä jokin tietokanta

Toimii, kaikki tietokannat mitä nyt äkkiseltään tulee mieleen

ZuBer kirjoitti:

tekstitiedostosta luku yms...

Toimii.

ZuBer kirjoitti:

Eli saako pelin tallennuksen rakennettua?

Saa, noilla ja monilla muillakin tavoilla.

ZuBer [28.08.2011 14:34:39]

#

Kiitoksia. Nyt vain pitäisi ruveta opettelemaan kieltä. Kertokaas nyt viisaat ihmiset, mistä aloitan. Olisiko jotakin suomenkielistä materiaalia? Visual Basicilla olen joskus koodannut. Toinen juttu, mitä tarvitsen koodaamiseen ja ohjelman kääntämiseen exe:ksi?

Grez [28.08.2011 14:38:28]

#

Jos nyt puhuit VB.Netistä ja aiot Windowsilla ohjelmoida, niin tuossa on kaikki mitä tarvitset koodaamiseen ja ohjelman kääntämiseen exeksi:
http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-basic-express

ZuBer [28.08.2011 14:41:42]

#

Tuolla olen koodannut aiemminkin. Mitä eroa on siis VB.Netillä ja tuolla Visual Basic expressillä vai onko mitään?

Grez [28.08.2011 14:45:12]

#

Toki Micosoftin Visual Basic 2010:stä on muitakin versioita kuin ilmainen Express edition, mutta kaikilla koodataa nimenomaan VB.Netiä. Eli voisi sanoa, että ei ole mitään eroa.

ZuBer [28.08.2011 17:56:37]

#

Päteekö siis Visual Basic-oppaat VB.nettiin?

Antti Laaksonen [28.08.2011 18:01:47]

#

Ohjelmointiputkan VB-oppaat eivät sovellu VB.NETin opiskeluun, koska ne käsittelevät vanhempaa VB6-versiota.

ZuBer [28.08.2011 18:07:07]

#

Saanko sitten tehtyä tälläisen pelin VB kutosella?

Grez [28.08.2011 18:25:40]

#

Grez kirjoitti:

VB6 on ehkä tällä palstalla usein puheena olevista kielistä ainoa, jolla ei ole suorastaan helppoa tehdä komentoriviohjelmia. Mutta sillähän ei kukaan täysjärkinen aloita muutenkaan uutta projektia ja esim. VB.Netilläkin komentoriviohjelmat onnistuu vaivatta.

Mielestäni ei ole mitään järkeä alkaa opiskelemaan VB6:tta. Opiskele ennemmin vaikka Java. Sillä voit tehdä tuollaisen pelin ja jos tuntuu että haluat siirtyä .Net -maailmaan niin C# on hyvin lähellä Javaa. Ja voihan siitä sitten siirtyä VB.Netiinkin jos jostain käsittämättömästä syystä haluaa.

Java-opasta täältä ei näytä löytyvän, mutta Javalalla pääsee varmastikin hyvin alkuun.

ZuBer [28.08.2011 18:30:50]

#

Menee pää sekaisin, kun kohta kaikkia kieliä on ehdotettu. Ilmaisella haluan päästä, ja ilman hirveän suurta opiskelua. Käyttäjäsivullani lukee kielet, joita olen käyttänyt. Peli tulee siis olemaan TODELLA lähellä RavintolaBisnestä.

Antti: Millä RavintolaBisnes on tehty?

Antti Laaksonen [28.08.2011 18:45:13]

#

RavintolaBisnes on tehty QBasicilla. Jos haluat tehdä sen kaltaisen pelin, niin QBasic lienee hyvä valinta.

Metabolix [28.08.2011 18:52:24]

#

ZuBer kirjoitti:

Menee pää sekaisin, kun kohta kaikkia kieliä on ehdotettu.

Sitten kannattaa selittää sille päälle, että käytettävällä kielellä ei ole asian kannalta juuri mitään väliä: mikä tahansa käy, jos vain osaat käyttää. (Jos taas et osaa, siinä ei paljon kielivalinta auta.)

QBasic on nykyään hankala valinta, koska DOS-ohjelmat eivät toimi kunnolla edes uusimmissa Windowseissa. Sitä paitsi QB-kääntäjä on maksullinen. FreeBASIC on käytännössä yhteensopiva, nykyaikaisempi ja lisäksi oikeasti ilmainen.

Grez [28.08.2011 19:00:26]

#

Tai QB64 (vai oliko se maksullinen, sivuista saa nopeasti käsityksen että olisi ilmainen). Nopeasti katsoen QB64 toimisi Win, Linux ja MacOS kun taas Freebasic Win, Linux ja DOS.

ZuBer [28.08.2011 20:35:45]

#

Onko QB64 siis sama kuin QBasic, tai saako sillä samaa aikaan ja mitä eroja..?

//Onko tuolla Freebasicilla järkeä alkaa vääntämään mitään, vai voiko sillä saada ihan exe:jäkin tehtyä? Voiko sillä käyttää tietokantoja yms. tai rakentaa pelin tallennussysteemin? Voiko sitä periaatteessa opiskella QB-oppaista?

jtha [28.08.2011 23:18:45]

#

VB6:sta täällä eräät parjaa jatkuvasti. Minulla on juuri päinvastaiset kokemukset .netistä ja sillä tehdyistä sovelluksista. EIVÄT YKSINKERTAISESTI TOIMI VAKAASTI!! Saat kaupan päälle bugeja, joita ei kukaan pysty ratkaisemaan - vaikka täällä jotku muuta väittävätkin. Säästä itsesi jatkuvalta säätämiseltä ja ongemien ihmettelyltä ja unohda .net joksikin aikaa. Eikä kaivinkoneella kannata tehdä teelusikan hommia. Ota vaikka se FreeBasic tms. simppelimpi väline

Grez [28.08.2011 23:31:14]

#

jtha kirjoitti:

VB6:sta täällä eräät parjaa jatkuvasti.

Ei täällä kukaan parjaa VB6:sta, mutta se nyt vaan on yksinkertainen fakta, että sellaisella sovelluskehitystyökalulla, jota ei ole kehitetty 13 vuoteen ja jonka tuki on lopetettu 3 vuotta sitten, ei ole mitään järkeä aloittaa uusia projekteja. Koskee kaikkia muitakin vastaavia eikä vain VB6.

Lisäksi on fakta, että VB6:lla ei ole erityisen näppärää tehdä komentoriviohjelmia. Toki se sillä onnistuu, mutta melkein millä tahansa muulla onnistuu helpommin.

VB.Net ei ole ainoa vaihtoehto VB6:lle. Jos VB.Net ei toimi, niin sitten kannattaa käyttää jotain muuta kieltä tai kehitystyökalua. En tosin jaa näkemystäsi VB.Netin ongelmista.

Metabolix [29.08.2011 02:00:21]

#

ZuBer kirjoitti:

Onko QB64 siis sama kuin QBasic, tai saako sillä samaa aikaan ja mitä eroja..?

Onko ihan mahdotonta kirjoittaa esim. Googleen "QB64" ja selvittää asia itse?

ZuBer kirjoitti:

//

Voisitko lopettaa tällaisen turhan merkinnän käyttämisen tavallisessa tekstissä?

ZuBer kirjoitti:

Onko tuolla Freebasicilla järkeä alkaa vääntämään mitään, vai voiko sillä saada ihan exe:jäkin tehtyä?

Voi tehdä ja on pakkokin tehdä, siinä ei ole tulkkia kuten QB:ssä.

ZuBer kirjoitti:

Voiko sillä [FB:llä] käyttää tietokantoja yms. tai rakentaa pelin tallennussysteemin?

Tietokannalla ei ole paljonkaan tekemistä tallentamisen kanssa. Hyvin harvassa pelissä käytetään oikeasti tietokantaa. Tiedosto on eri asia, ja tiedostoja voi käsitellä lähes kaikilla kielillä. (Tässä mainituista JS on poikkeus.)

ZuBer kirjoitti:

Voiko sitä [FB:tä] periaatteessa opiskella QB-oppaista?

Osittain voi (ainakin, jos laittaa FB:n erityiseen QB-tilaan), mutta kun kerran on tarjolla myös FB-oppaita, kannattaa tietenkin suosia niitä – niissä opetetaan tekemään asiat nykyaikaisemmin, eikä ainakaan tule yllätyksiä, että jokin koodi ei toimisikaan.

jtha [29.08.2011 10:17:37]

#

Grez, siinä on järkeä jos ja kun sovellus toimii ja toteuttaa tehtävänsä! VB6 on mielestäni ns. "valmis" useimpiin tarkoituksiin. Miksi päivittää jos ei ole tarvetta.

jtha [29.08.2011 11:14:30]

#

Jotakin tällaistako kysyjä tarkoitti:

Dim Leveys As Long, Korkeus As Long, KursoriX As Integer, KursoriY As Integer, Merkki As String
Dim Maski(0 To 11, 0 To 6) As Integer

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

  Merkki = UCase(Chr(KeyCode))

  If Merkki = "Y" Then
    SiirräMerkkiä 0, -1
  ElseIf Merkki = "A" Then
    SiirräMerkkiä 0, 1
  ElseIf Merkki = "O" Then
    SiirräMerkkiä 1, 0
  ElseIf Merkki = "V" Then
    SiirräMerkkiä -1, 0
  End If

End Sub

Private Sub Form_Load()

'Nämä asetin formin ominaisuuksissa:
'Fontti = Courier New
'AutoRedraw = True
'BackColor =&HFFFFFF

'"_" = maali
'Huom.  Laajemmissa kuvioissa muuta Maskin kokoa ("Dim Maski(0 To 11, 0 To 6) As Integer" ylempänä)
TeeMaski 0, "# # # # # #"
TeeMaski 1, "# @ # #   _"
TeeMaski 2, "#         #"
TeeMaski 3, "#   # #   #"
TeeMaski 4, "#         #"
TeeMaski 5, "# # # # # #"

Leveys = Form1.TextWidth("#")
Korkeus = Form1.TextHeight("#")

End Sub

Private Sub TeeMaski(Rivi As Integer, Teksti As String)

  Form1.Print Teksti

  For i = 1 To Len(Teksti)
    If Mid(Teksti, i, 1) = "#" Then
      Maski(i - 1, Rivi) = 1
    ElseIf Mid(Teksti, i, 1) = "@" Then
      KursoriX = i - 1
      KursoriY = Rivi
    ElseIf Mid(Teksti, i, 1) = "_" Then
      Maski(i - 1, Rivi) = -1
    End If
  Next

End Sub

Private Sub SiirräMerkkiä(SuuntaX, SuuntaY)

  If KursoriX + SuuntaX > 10 Then
    Exit Sub
  ElseIf KursoriY + SuuntaY > 5 Then
    Exit Sub
  ElseIf KursoriX + SuuntaX < 0 Then
    Exit Sub
  ElseIf KursoriY + SuuntaY < 0 Then
    Exit Sub
  ElseIf Maski(KursoriX + SuuntaX, KursoriY + SuuntaY) = 1 Then
    Exit Sub
  End If

  Form1.CurrentX = KursoriX * Leveys
  Form1.CurrentY = KursoriY * Korkeus
  Form1.Line (Form1.CurrentX, Form1.CurrentY)-(Form1.CurrentX + Leveys, Form1.CurrentY + Korkeus), &HFFFFFF, BF
  KursoriX = KursoriX + SuuntaX
  KursoriY = KursoriY + SuuntaY
  Form1.CurrentX = KursoriX * Leveys
  Form1.CurrentY = KursoriY * Korkeus
  Form1.Print "@"

  If Maski(KursoriX, KursoriY) = -1 Then MsgBox ("Maali")

End Sub

Topmultiplay [29.08.2011 14:28:55]

#

Kyl kannattaa kokeilla Batch/Assemblyy.. Tai C++...

ErroR++ [29.08.2011 16:24:05]

#

Jos haluat koodata VB.NETillä, niin tästä QBasic -funktiot ja siirryt täältä lukemaan peliohjelmointia QB:llä. Sitten vain oheinen koodi johonkin ja...

Module Methods
    Sub LOCATE(ByVal X As Single, ByVal Y As Single)
        System.Console.SetCursorPosition(X, Y)
    End Sub
    Sub WIDTH(ByVal x As Integer, ByVal y As Integer) 'x ja y vain yhteensopivuuden vuoksi
        System.Console.SetWindowSize(100, 58)
        System.Console.SetBufferSize(100, 58)
    End Sub
    Sub PRINT(ByVal TEXT As String)
        System.Console.Write(TEXT)
    End Sub
    Sub INPUT(ByVal TEXT As String, ByRef CONTENTS As String)
        System.Console.Write(TEXT)
        CONTENTS = System.Console.ReadLine
    End Sub
    Sub CLS()
        System.Console.Clear()
    End Sub
    Function INKEY() As String
        Dim kc As String = Console.ReadKey(True).KeyChar
        Return kc
    End Function
End Module

Joudut tekemään hieman muokkauksia QuickBasic -koodiin.

jalski [30.08.2011 12:45:19]

#

Blaze kirjoitti:

kinnala kirjoitti:

Parempi ratkaisu luolaseikkailun tekemiseksi olisi tietenkin käyttää jotain curses-tyylistä kirjastoa apuna.

Tarkoitit paremmalla varmaan "ainoa oikea".

Ei kai nyt sentään... ;-)

No, Windowsilla tuo ehkä pitkälti noin onkin. Onneksi kuitenkin suurimmalla osalla muista järjestelmistä homma onnistuu ANSI escape sequence koodien avulla suhteellisen mukavasti.

Oma työympäristöni olisi OS/2 ja PL/I-kääntäjä. Mitään kirjastoja työhön ei tarvita.

jcd3nton [31.08.2011 15:29:17]

#

Jalskille plussaa tuosta. Olisi varsin hienoa, jos softakehittajat osaisivat sen verran puhaltaa yhteen hiileen, ettei jok'ikisen fullscreen-terminaalisovelluksen tarvitsisi linkittaa kirjastoon, joka lukee jarjestelman mukana toimitettua yhteensopimattomuustietokantaa ja haistattaa pitkat jos sinulla sattuu olemaan harvinaisempi terminaali, tai jos kannassa olevat tiedot ovat virheelliset, tai jos ...

Koko systeemin historiahan taitaa olla siina, etta alunperin oikeat lasipaatteet toimitettiin kayttajille osana kokonaisuutta, johon kuului myos itse palvelimet kayttojarjestelmineen. Yhteensopivuudesta ei puhuttu, vaan riitti, etta kokoonpanon toimittaja on kirjoittanut sisaanrakennetun tuen kayttamilleen paatteille. Myohemmin sitten alkoi tulla uusia paatteita uusilla ominaisuuksilla, ja toisaalta olemassa olevia laitteita alettiin sekakayttaa toimittajien vaihtuessa (tai muuten vaan), ja siina tilanteessa tietokanta on ollut toimivin ratkaisu.

Emulaattorien aikakautena ei yhteensopimattomuudelle taida oikeastaan loytya yhtakaan hyvaa syyta, ja itseasiassa emulaattorit ovatkin suurimmalta osin yhteensopivia. Silti (bloatti) kanta on edelleen riesana nykyjarjestelmissa. Viimeksi eilen kaveri valitteli, kun koulun palvelin ei tuntenut rxvt-unicodea, ja vielapa ilmoitti, etta TERM-muuttuja on liian pitka. Piponnosto sille, joka osaa lonkalta etsia tarvitun terminfo-tiedoston, korjata siihen lyhyemman nimen, kaantaa sen haluttuun formaattiin ja laittaa oikeaan paikkaan palvelimelle. Ja enta jos tiedostoa ei loydy? Ei taida moisen kirjoittaminen kovin monelta onnistua. Ei se vaikeaa ole.. mutta MIKSI? Hassua tassa tilanteessa on se, etta jos softat suosiolla kayttaisivat jalskin mainitsemia ANSI-sekvensseja, ei mitaan ongelmaa olisi ollut.

Toki lasiterminaalit ovat hauskoja kapistuksia, mutta jos (yhteensopimattomalla) sellaisella haluaa leikkia, eiko olisi jo aika kaantaa emulointi toisin pain? Ohjelmat voisivat suoltaa standardikamaa, ja retroilijat asettaisivat paatteen ja sovellusten valiin emulaattorin.

API:na curses ei paljonkaan tarjoa ohjelmoijalle. Lahinna syotteenkasittelyn asettaminen raakamoodiin helpottuu hieman. Myos ikkunaviritelmat voivat helpottaa, jos olet jotain perin erikoista tekemassa. Toisaalta dialogien piirtoon tarvittavan koodin kirjoittaa hetkessa, eika sita tule paljon. Omasta ratkaisusta voi tulla monipuolisempi, eika tarvitse vaivata aikaa cursesin oikkujen ymmartamiseen. Joiltain osin cursesin valinta vaikuttaa jopa negatiivisesti, kun taytyy opetella sen tarjoamat funktiot syotteen lukemiseen ja ulostamiseen, vaikka standardissa C:ssa siihen on ennestaan tutut menetelmat.

Omassa fullscreen-koodieditorissa on kuusi makroa, joilla kursorin liikuttelu, ruudun tyhjentaminen, ym. onnistuu ANSI-sekvenssein. Kunkin maarittely vie yhden rivin. Lisaksi loytyy yksi 30-rivinen funktio, jolla syotteenkasittely laitetaan raakamoodiin tai palautetaan alkuperaiseksi. Vertailun vuoksi..

% find /usr/src/lib/libcurses/ -name '*.c'|xargs wc -l|tail -1
37173 total
% find /usr/src/usr.bin/tic -name '*.c'|xargs wc -l|tail -1
2804 total
% ls -l /usr/share/misc/term*.db
-r--r--r-- 1 root bin 3104768 Jul 24 19:07 /usr/share/misc/termcap.db
-r--r--r-- 1 root bin 5640192 Jul 24 19:07 /usr/share/misc/terminfo.db
% ls -l /usr/lib/libcurses.so.12.0
-r--r--r-- 5 root bin 1450073 Jul 24 19:04 /usr/lib/libcurses.so.12.0

Toivottavasti joku kaunis paiva noista paasen eroon :-)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta