Eipä toimi viäkään... Hitto alkaa tympiin...TheFish wrote:Helpointa olisi varmaan tehdä waitkey:n avulla.
Kun painan kaks kertaa Enterii se näyttää kaiken putkeen...
Millä hitolla mä saan ton toimiin?
Eipä toimi viäkään... Hitto alkaa tympiin...TheFish wrote:Helpointa olisi varmaan tehdä waitkey:n avulla.
Code: Select all
Repeat
Drawscreen
Until Keyhit(28)
Code: Select all
valinta:
'tekstien lisääminen
Repeat
a = GetKey()
Drawscreen
Until a
If a = Asc("1") Then Goto koira
If a = Asc("2") Then Goto kissa
Goto valinta
Code: Select all
Koira:
ClearText
haukku = Timer()
paskoi = Timer()
siivottu = True
AddText "Koirasi katsoi sinua hassusti!"
Repeat
If Timer()>haukkui+15000 Then
AddText "Koira haukkui sinulle!"
haukkui=Timer()
EndIf
If Timer()>paskoi+30000 Then
AddText "Koira päästi paskat lattialle! Korjaa paskat pois D napilla!"
paskoi=Timer()
siivottu=False
EndIf
If Keyhit(cbkeyd) Then
If siivottu Then AddText "Ei ole jätöksiä, joita korjata!"
If Not siivottu then AddText "Korjasit koirasi jätökset!":siivottu = True
EndIf
DrawScreen
Forever
koodaaja wrote:Jepjep, tympiminen on normaalia ohjelmoidessa, ainakin kun ei käsitä mikä on pielessä. Tuosta koodinpätkästä sanoisin melkein, että heitä sillä vesilintua. Jos aiot tehdä koko pelin tekstipohjaisena, addtextin käyttö on epäkäytännöllistä, jos teet sen graafisena, gotottelu ei oikein hemaise. Mutta korjaanpas silti ongelmia:
Alussa enterinpainamissysteemi lievästi sanottuna kusee. KeyHit tarkistetaan yhdeltä framelta, joten käyttäjällä on aikaa semmoinen apout 0.05 sekuntia painaa enteriä. Lisäksi goto on turha, tuohon väliin kun ei todennäköisesti ole mitään tulossa. Joten
ajaa asian varsin nätisti. Se siis päivittää tekstin ja odottaa enterin painamista kiltisti.Code: Select all
Repeat Drawscreen Until Keyhit(28)
Noniin, valintaan. Se kaipaa selvästi jonkinnäköistä looppia sekin, jotta ohjelma odottaisi. Toki saman voi tehdä kikkailemalla, mutta selkeyden vuoksi looppi on hyvä.
Näin ohjelma odottaa, että jotain painetaan, ja painamisen jälkeen tarkistetaan, onko kyseessä 1 tai 2. Tämän voisi varmasti toteuttaa paremminkin, mutta tämä toimii ja on varsin selkeä.Code: Select all
valinta: 'tekstien lisääminen Repeat a = GetKey() Drawscreen Until a If a = Asc("1") Then Goto koira If a = Asc("2") Then Goto kissa Goto valinta
Niin, tässä sama juttu kuin edellisessä: koodissasi ei pysähdytty odottamaan, vaan käyttäjälle jäi pieni sekunnin murto-osa aikaa valita kissan ja koiran väliltä. Siinä ei myöskään DrawScreeniä esiintynyt, joten käyttäjälle ei näytetty tekstejä ikinä.
Noniin, koira-sektiossakin on pientä probleemia. Ajastinta käytetään nimittäin varsin kiintoisasti, ja koiran jätökset voi korjata vain ennen niiden saapumista. Koko systeemi käydään lisäksi vain kerran läpi, joten looppia huutaa tämäkin. Ja haukku- ja paskoi-muuttujille ei annettu arvoja, joten ne tapahtuivat heti. Nehän kuuluu alustaa Timer():iin.
Näin ei myöskään mennä kissa-osioon suoraan koira-osiosta, kuten koodissasi oli (koodi suoritetaan rivistä 1 niin pitkälle kuin niitä riittää, labeleihin yms. ei pysähdytä)Code: Select all
Koira: ClearText haukku = Timer() paskoi = Timer() siivottu = True AddText "Koirasi katsoi sinua hassusti!" Repeat If Timer()>haukkui+15000 Then AddText "Koira haukkui sinulle!" haukkui=Timer() EndIf If Timer()>paskoi+30000 Then AddText "Koira päästi paskat lattialle! Korjaa paskat pois D napilla!" paskoi=Timer() siivottu=False EndIf If Keyhit(cbkeyd) Then If siivottu Then AddText "Ei ole jätöksiä, joita korjata!" If Not siivottu then AddText "Korjasit koirasi jätökset!":siivottu = True EndIf DrawScreen Forever
Ehkä tämä selkeyttää jotain. Jos et saa koodinpätkistä selvää, niin kysy vain tarkennusta.
Code: Select all
repeat
color cbblue
text 0,0,"sininen"
color cbred
text 0,10,"punainen"
drawscreen
forever
Code: Select all
AddText ""
AddText "r = ruoki"
nälkä = 100
Repeat
Text ScreenWidth()-(TextWidth("Nälkä: 00 ")),0,"Nälkä: "+nälkä
If Timer()>jotain+500 Then
nälkä - 1
jotain = Timer()
EndIf
If KeyHit(cbkeyr) Then
' maksimi on 100, 23% = 23
' jos maksimi on eri, joutuu kikkailee
' matikalla: a / b * 100
If nälkä > 100-23 Then
AddText "Eläin on tarpeeksi kylläinen!"
Else
AddText "Ruokit eläintä!"
nälkä + 23
EndIf
EndIf
DrawScreen
Forever
Code: Select all
' 10 tavaraa
Dim tavara(10) As String
tavara(1) = "pesukone"
tavara(2) = "kuumailmapallo"
tavara(3) = "jotain sälää"
Repeat
For i=1 To 10
If tavara(i)<>"" Then
Text 0,i*10,tavara(i)
EndIf
Next i
DrawScreen
Forever
Code: Select all
nakyy = 100
Repeat
nakyy - 1
If nakyy>0 Then Text 0,0,"lol"
DrawScreen
Forever
Mitenkä tota voi soveltaan ajastettuihin teksteihin?Grandi wrote:Code: Select all
nakyy = 100 Repeat nakyy - 1 If nakyy>0 Then Text 0,0,"lol" DrawScreen Forever
Code: Select all
AddText "lemmikkisi nimi:"
Repeat
Locate 0,20
nimi$ = Input(">")
DrawScreen
Until KeyHit(28)
ClearKeys
CloseInput
Text 0, 20, nimi
DrawScreen
WaitKey
Arvostan kovasti apuasi mutta kun kirjoitan AddText "nimi katsoi sinua" niin siinä on tuo nimi sana alla ja päällä se lemmikin nimi ja sekin pikku piperryksenä...-Z- wrote:sitten vaan käytät muuttujaa "nimi " aina kun lemmikin nimi pitää saada näkyvilleCode: Select all
AddText "lemmikkisi nimi:" Repeat Locate 0,20 nimi$ = Input(">") DrawScreen Until KeyHit(28) ClearKeys CloseInput Text 0, 20, nimi DrawScreen WaitKey
Code: Select all
addtext nimi+"katsoi sinua"
Code: Select all
SCREEN 800, 600
matin_ikä = 40
tepon_ikä = 50
erotus = tepon_ikä - matin_ikä
//Myös näin voi tehdä:
etunimi$ = "Erkki"
sukunimi$ = "Esimerkki"
koko_nimi$ = etunimi$ + " " + sukunimi$
numero1 = 15
numero2 = 25
numero3 = 35
Repeat
Text 20, 20, "Matti on " + matin_ikä + " vuotta."
Text 20, 40, "Teppo taas on " + tepon_ikä + " vuotta."
Text 20, 60, "Näin ollen Matti on " + erotus + " vuotta nuorempi kuin teppo"
Text 20, 100, "Nimi: " + koko_nimi$ + ". Voidaan ilmaista myös näin:"
Text 20, 120, sukunimi$ + ", " + etunimi$
//Laskutoimitukset pitää erottaa suluilla, käytämme "erottavia" plussia.
Text 20, 160, numero1 + " + " + numero2 + " - " + numero3 + " = " + ( numero1 + numero2 - numero3 )
DrawScreen
Forever
Code: Select all
SCREEN 800, 600
matin_ikä = 40
tepon_ikä = 40
Repeat
//Tässä katsomme onko ylös- tai alaspäinnuolta painettu. Jos on, muutamme matin ikää.
If KeyHit( CbKeyUp ) Then matin_ikä = matin_ikä + 1
If KeyHit( CbKeyDown ) Then matin_ikä = matin_ikä - 1
//Pitkähkö ehtolauseke, jossa katsomme onko muuttuja matin_ikä suurempi, pienempi vai yhtäsuuri kuin tepon_ikä.
//Tämän perusteella annamme muuttujalle info$ arvon.
If matin_ikä > tepon_ikä Then
If matin_ikä - tepon_ikä = 1 Then
vuosi$ = " vuoden"
Else
vuosi$ = " vuotta"
EndIf
info$ = "Matti on Teppoa " + ( matin_ikä - tepon_ikä ) + vuosi$ + " vanhempi."
ElseIf matin_ikä < tepon_ikä Then
If tepon_ikä - matin_ikä = 1 Then
vuosi$ = " vuoden"
Else
vuosi$ = " vuotta"
EndIf
info$ = "Matti on Teppoa " + ( tepon_ikä - matin_ikä ) + vuosi$ + " nuorempi."
ElseIf matin_ikä = tepon_ikä Then
info$ = "Matti ja Teppo ovat saman ikäisiä!"
EndIf
//Kirjoitamme kaiken ylös. Tämä on ainoa mitä itse ohjelmassa näkyy.
Text 20, 20, "Ylös- ja alaspäinnuolet muuttavat Matin ikää."
Text 20, 60, "Matti on: " + matin_ikä
Text 20, 80, "Teppo on: " + tepon_ikä
Text 20, 100, info$
DrawScreen
Forever
Jaa tuollain! Thanks! Tätä tulen tarviimaan!Jonez wrote:Voit tulostaa muuttujan arvon kirjoittamalla muuttujanimen esim. text-komennolla, kuten -Z-:n varsin monipuolisesta esimerkistä voit huomata. Muuttujia voi plussata, miinustaa jne. Oikeastaan voit tehdä melkein mitä vain matemaattisia yhtälöitä, jos matemaattiset taitosi riittävät. Cb:ssä voit myös helposti yhdistää merkkijonoja ja merkkijonomuuttujia. Merkkijono on siis pätkä tekstiä.
- Kokonaislukumuuttujat sisältävät kokonaislukuja, esim. 1, 2, -4321, 32154.
- Merkkijonomuuttuja on muuttuja joka sisältää tekstiä. Merkkijonomuuttujan tunnistaa dollarimerkistä muuttujan perässä. Esim: nimi$
Muitakin muuttujia on, esim. liukulukumuuttujat, eli muuttujat jotka sisältävät desimaalilukuja. (Risuaita loppuun: Pituus#, paino#)
Tässä kaksi koodia jossa leikitään vähän muuttujilla. Siitä pitäisi saada ihan hyvä kuva miten esim. Kirjoitat ruudulle sellaista tekstiä, jossa on esim. lemmikin nimi, jota voi muuttaa, sekä samaan aikaan pysyvää kirjoitusta.Code: Select all
SCREEN 800, 600 matin_ikä = 40 tepon_ikä = 50 erotus = tepon_ikä - matin_ikä //Myös näin voi tehdä: etunimi$ = "Erkki" sukunimi$ = "Esimerkki" koko_nimi$ = etunimi$ + " " + sukunimi$ numero1 = 15 numero2 = 25 numero3 = 35 Repeat Text 20, 20, "Matti on " + matin_ikä + " vuotta." Text 20, 40, "Teppo taas on " + tepon_ikä + " vuotta." Text 20, 60, "Näin ollen Matti on " + erotus + " vuotta nuorempi kuin teppo" Text 20, 100, "Nimi: " + koko_nimi$ + ". Voidaan ilmaista myös näin:" Text 20, 120, sukunimi$ + ", " + etunimi$ //Laskutoimitukset pitää erottaa suluilla, käytämme "erottavia" plussia. Text 20, 160, numero1 + " + " + numero2 + " - " + numero3 + " = " + ( numero1 + numero2 - numero3 ) DrawScreen Forever
Code: Select all
SCREEN 800, 600 matin_ikä = 40 tepon_ikä = 40 Repeat //Tässä katsomme onko ylös- tai alaspäinnuolta painettu. Jos on, muutamme matin ikää. If KeyHit( CbKeyUp ) Then matin_ikä = matin_ikä + 1 If KeyHit( CbKeyDown ) Then matin_ikä = matin_ikä - 1 //Pitkähkö ehtolauseke, jossa katsomme onko muuttuja matin_ikä suurempi, pienempi vai yhtäsuuri kuin tepon_ikä. //Tämän perusteella annamme muuttujalle info$ arvon. If matin_ikä > tepon_ikä Then If matin_ikä - tepon_ikä = 1 Then vuosi$ = " vuoden" Else vuosi$ = " vuotta" EndIf info$ = "Matti on Teppoa " + ( matin_ikä - tepon_ikä ) + vuosi$ + " vanhempi." ElseIf matin_ikä < tepon_ikä Then If tepon_ikä - matin_ikä = 1 Then vuosi$ = " vuoden" Else vuosi$ = " vuotta" EndIf info$ = "Matti on Teppoa " + ( tepon_ikä - matin_ikä ) + vuosi$ + " nuorempi." ElseIf matin_ikä = tepon_ikä Then info$ = "Matti ja Teppo ovat saman ikäisiä!" EndIf //Kirjoitamme kaiken ylös. Tämä on ainoa mitä itse ohjelmassa näkyy. Text 20, 20, "Ylös- ja alaspäinnuolet muuttavat Matin ikää." Text 20, 60, "Matti on: " + matin_ikä Text 20, 80, "Teppo on: " + tepon_ikä Text 20, 100, info$ DrawScreen Forever
Juu kiitos! Nyt toimii tuo!-Z- wrote:kokeileppapitäisi vörkkiä.Code: Select all
addtext nimi+"katsoi sinua"
Code: Select all
nakyy = 100
Repeat
nakyy - 1
If nakyy>0 Then Text 0,0,"lol"
DrawScreen
Forever
Code: Select all
Koira:
ClearText
sairas = Timer()
haukku = Timer()
paskoi = Timer()
siivottu = True
AddText nimi+" katsoi sinua hassusti"
Repeat
Color cbblue
nakyy = 1000
nakyy - 1
If nakyy>0 Then Text 0,0,"lol"
If Timer()>haukkui+15000 Then
AddText nimi+" haukkui sinulle!"
haukkui=Timer()
EndIf
If Timer()>leikkii+10000 Then
AddText nimi+" rupesi leikkimään"
leikkii=Timer()
EndIf
Color cbBlackSkin
If Timer()>paskoi+30000 Then
AddText nimi+" päästi paskat lattialle! Korjaa paskat pois D napilla!"
paskoi=Timer()
siivottu=False
EndIf
If Keyhit(cbkeyd) Then
If siivottu Then AddText "Ei ole jätöksiä, joita korjata!"
If Not siivottu Then AddText "Korjasit jätökset!":siivottu = True
EndIf
Color cbMagenta
If Timer()>sairas+200000 Then
AddText nimi+" näyttää oudolta... Sinun olisi paras viedä se lääkäriin L napista"
sairas=Timer()
parannettu=False
EndIf
If KeyHit(cbkeyl) Then
If parannettu Then AddText nimi+" sai terveen paperit!"
If Not parannettu Then AddText "Lääkäri tutki lemmikkisi ja antoi sille lääkettä":parannettu = True
EndIf
Color cbyellow
nälkä = 100
Text ScreenWidth()-(TextWidth("Nälkä: 00 ")),0,"Nälkä: "+nälkä
If Timer()>jotain+1000 Then
nälkä - 1
jotain = Timer()
EndIf
If KeyHit(cbkeyr) Then
If nälkä > 100-23 Then
AddText nimi+" on tarpeeksi kylläinen!"
Else
AddText "Ruokit lemmikiäsi!"
nälkä + 23
EndIf
EndIf
DrawScreen
Forever
Kiitos! Nyt sain toimiin elämätkinJonez wrote:No asetat kokoajan muuttujan "nälkää" sadaksi. Laita se 'nälkä = 100' jonnekkin ennen silmukkaa, muuten muuttujan nälkä arvo ei voi muuttua. Sama koskee muuttujaa 'nakyy'.
Lisäksi, kuten sanoin, merkkijonomuuttujissa pitää olla se dollarimerkki edessä. Riittää että käytät sitä vain kerran, kunhan se on ensimmäisessä sennimisessä muuttujassa. Muutoin cb ei tiedä että kyseessä on merkkijonomuuttuja. Esim:
Nimi$ = "Pertti" // <-- Huomaa, dollarimerkki
text 20, 20, Nimi + " on ihminen!" // <-- huomaa, ei dollarimerkkiä. Toimii koska muuttuja on jo määritelty edellisellä rivillä.
Code: Select all
Repeat
DrawScreen
Until KeyHit(28)
nimi:
ClearText
AddText "Lemmikkisi nimi:"
Repeat
Locate 0,20
nimi$ = Input(">")
DrawScreen
Until KeyHit(28)
ClearKeys
CloseInput
Text 0, 20, nimi
DrawScreen
WaitKey
Perus:
ClearText
AddText "Ok! Nyt voit tehä tähän sen systeemin esimerkiksi"
Joku = Timer()
Repeat
If Timer()>Joku+2000 Then
AddText nimi+"Help me!"
joku=Timer()
EndIf
DrawScreen
Forever
Code: Select all
ajastin = Timer()
Repeat
If Timer() - ajastin > 1000 And Timer() - ajastin < 3000 Then Text 10, 10, "Kuiva esimerkkiteksti"
Drawscreen
Forever
Ööh... Toi oli vaan tehty esimerkkiä varten nopeesti... Se ei haittaa jos siinä on pikku virheitä...koodaaja wrote:Älä aseta Joku-muuttujan arvoa vielä tuossa vaiheessa Timer()iin, äläkä käytä AddTextiä.
Code: Select all
ajastin = Timer() Repeat If Timer() - ajastin > 1000 And Timer() - ajastin < 3000 Then Text 10, 10, "Kuiva esimerkkiteksti" Drawscreen Forever
Code: Select all
nakyy = 100
Repeat
nakyy - 1
If nakyy>0 Then Text 0,0,"lol"
DrawScreen
Forever
Juu nyt ymmärsin... Mutta saanen sanoa että tuo koodi ei toimi oikein minun käyttötarkoitukseeni...koodaaja wrote:Tuotah. Tuo on wanha purkka, joka esiintyy lähes kaikissa mahdollisissa CB-tutoriaaleissa, se on FPS-riippuvainen eikä erityisen kaunis tapa ratkaista asia. Tosin se pelittää aivan hyvin. Tuo siis periaatteessa tekee laskurin, jota lasketaan pykälä joka kierroksella. Ja niin kauan kuin se on yli nollan, näytetään teksti. Toki kun ei ole mikään räiskintä, jossa jokainen toiminto on millisekunnista kiinni, niin tuo on yhtä toimiva ja selkeämpi käsittää kuin Timer(), ainakin itselleni oli ensimmäisiä projekteja väkertäessä. Eli noin se toimii (ja vielä ylimääräisellä tiedolla höystettynä)
Code: Select all
ajastin = Timer()
Repeat
If Timer() - ajastin < 1000 Then Text 10, 10, "Kuiva esimerkkiteksti"
If Timer() - ajastin > 5000 Then ajastin = Timer()
DrawScreen
Forever
Kiitos taas kerrankoodaaja wrote:No muokkasinpa siitä sitten tuollaisen:
Eli kun ajastin on kulkenut alle sekunnin, (1 sec = 1000 millisekuntia, Timer() siis antaa arvot millisekunteina) teksti näkyy, ja viiden sekunnin jälkeen se nollataan. Eli vastaavat arvot tapauksessasi olisivat 1000 ja 21 000, jolloin ensin näytettäisiin teksti ja odotettaisiin 20 sec, sitten teksti uudelleen jne.Code: Select all
ajastin = Timer() Repeat If Timer() - ajastin < 1000 Then Text 10, 10, "Kuiva esimerkkiteksti" If Timer() - ajastin > 5000 Then ajastin = Timer() DrawScreen Forever