types kapier ich nicht
Übersicht

EisrabeBetreff: types kapier ich nicht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also, ich habe eine einfache aufgabe mit arrays einfach lösen können
hier listing mit erläuterungen Code: [AUSKLAPPEN] Graphics 800,600,16,2
schrift_arial$=LoadFont ("Arial",14,0,0,0) SetFont schrift_arial SeedRnd MilliSecs() Dim kwert(52) ; je ein array für den wert einer der 52 karten Dim kn$(52) ; je ein array für den namen jeder karte Dim farb$(4) ; karo, herz, pik, kreuz gekommen je einen array For f=1 To 4 ; die 4 farben werden eingelesen Read farb$(f) Next For t=1 To 13 ; jede der 52 karten bekommt hier ihren namen Read ktemp$ kn$(t)=farb$(1)+ktemp$ kn$(t+13)=farb$(2)+ktemp$ kn$(t+26)=farb$(3)+ktemp$ kn$(t+39)=farb$(4)+ktemp$ Next For t=1 To 13 ; und hier ihren wert Read kwert(t) kwert(t+13)=kwert(t) kwert(t+26)=kwert(t) kwert(t+39)=kwert(t) Next For dg=1 To 5 ; 5x durchmischen ;) For t=1 To 52 ; statt des swap-befehls z=Rand(1,52) temp=kwert(t) kwert(t)=kwert(z) kwert(z)=temp te$=kn$(t) kn$(t)=kn$(z) kn$(z)=te$ Next Next For t=1 To 52 ; alle gemischten karten in zufälliger reihenfolge Print kn$(t)+" hat einen Wert von: "+kwert(t) If t=26 Then WaitKey Next WaitKey End Data "karo","herz","pik","kreuz" Data "zwei","drei","vier","fuenf","sechs","sieben" Data "acht","neun","zehn","bube","dame","koenig","ass" Data 2,3,4,5,6,7,8,9,10,2,3,4,11 dann hab ich versucht das gleiche mit types zu lösen und bin gescheitert. beispiele aus der onlinehilfe funktionieren, aber wenn ich es 1:1 in mein schema baue, bekomme ich ne fehlermeldung. grr . hier das listing, wie weit ich gekommen bin, bis ich aufgeben musste. Code: [AUSKLAPPEN] Graphics 800,600,16,2
schrift_arial$=LoadFont ("Arial",16,0,0,0) SetFont schrift_arial Type karte Field name Field wert End Type For t=1 To 13 karo.karte = New karte herz.karte = New karte pik.karte = New karte kreuz.karte = New karte Read a$, a karo\name = a$ karo\wert = a herz\name = a$ herz\wert = a pik\name = a$ pik\wert = a kreuz\name = a$ kreuz\wert = a Next For name.karte Each karte ; <---- hier gibts ne fahlermeldung Print karo\name Next WaitKey End Data "karozwei",2,"karodrei",3,"karovier",4,"karofuenf",5,"karosechs",6,"karosieben",7 Data "karoacht",8,"karoneun",9,"karozehn",10,"karobube",2,"karodame",3,"karokoenig",4,"karoass",11 ich bitte euch, keine sprüche oder lästereien. wenn dir mein code nicht gefällt oder das alles schwachsinn ist, weils kein sinn macht, dann bitte ignoriere es einfach. diese sinnlosen progs helfen mir zu verstehen, wie alles funktioniert. denn lieber in nem 20 zeilen prog die sache verstehen, als in nem 3000-zeilen-projekt nen gehirn-krampf zu bekommen. ich will hier kein kurz zu types haben. es wäre mir schon geholfen, wenn jemand mein obriges array-listing mit types umsetzt. |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
walskiEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
For name.karte = each karte
und tada, es geht. So wie du es aber machst ist es fast sinnlos! Besser wäre es so: Code: [AUSKLAPPEN] Type Karte field Typ field Wert end type Global Deck.Karte ;Hier die daten Einlesen. Wobei für Deck\Typ immer n Integer als Bezeichner für die Farbe steht. Also Beispielsweise: 1=Karo,2=Herz etc for Deck = each Karte if Deck\Typ=1 then ;Wenns ne Herz Karte ist: print "Herz: " + str(Deck\Wert) endif next Sowas in der Art ist halt sinnvoller. Da du mit deinen 4 Types-Vars eben doch nur ein Type ansprichst und das in BB zu nur EINER Liste wird! Also wenn du alle Elemente von Karo.Karte durchgehst sind da auch alle Elemente von Herz.Karte dabei! walski |
||
buh! |
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke dir. was ein kleines "=" so anrichten kann ![]() hm. ist das Code: [AUSKLAPPEN] Global Deck.Karte nur eine andere art von? Code: [AUSKLAPPEN] deck.karte = New karte
wäre es möglich, dass du das listing so zuende schreibst, dass es das gleiche kann, wie im obrigen? und wie mischt man mit den types? geht das? ich glaube man liest die ganze liste aus, speichert sie in temp-variablen, mischt sie und schreibt sie wieder in die type-liste, oder? denn man kann die dinger ja so schlecht direkt ansprechen. und kann man da keine strings speichern? weil du einen umweg über ne integer mit str gemacht hast EDIT: warum bekomme ich dort den error: VARIABLE TYPE MISMATCH ?!?! Code: [AUSKLAPPEN] Type karte
Field name Field wert End Type For t=1 To 13 karo.karte = New karte Read a$, a karo\name = "karo"+a$ karo\wert = a Next For a.karte = Each karte ; <-- hier kommt die fehlermeldung Print a\wert Next eigentlich ist das listing fast IDENTISCH mit dem im handbuch. damnit. und es kommt die dusselige fehlermeldung. args. EDIT2: ok, ich glaub ich habs jetzt. in die type-variablen kann man keine strings ablegen (desshalb heissen sie wohl auch variable ![]() das macht es aber noch umständlicher, wenn es auch strings zu speichern gibt. mittlerweile bezweifle ich, dass mein obriges array-listing mit types zu schlagen ist ![]() ![]() ![]() |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich nehme alles zurück, was ich über types gesagt habe ![]() ich habe es eben grad geschafft (statt schlafen. wer braucht schon schlaf? ... zzZZZ) hier das funktionierende listing. habsch ganz alleine gemacht ![]() Code: [AUSKLAPPEN] Graphics 800,600,16,2
schrift_arial$=LoadFont ("Arial",14,0,0,0) SetFont schrift_arial Type karte Field farbe Field typ Field wert End Type For f=1 To 4 Restore For t=1 To 13 deck.karte = New karte Read a, b deck\typ = a deck\wert = b deck\farbe = f Next Next For deck.karte = Each karte If deck\farbe = 1 Then fa$="Karo" If deck\farbe = 2 Then fa$="Herz" If deck\farbe = 3 Then fa$="Pik" If deck\farbe = 4 Then fa$="Kreuz" If deck\typ = 1 Then ta$="zwei" If deck\typ = 2 Then ta$="drei" If deck\typ = 3 Then ta$="vier" If deck\typ = 4 Then ta$="fuenf" If deck\typ = 5 Then ta$="sechs" If deck\typ = 6 Then ta$="sieben" If deck\typ = 7 Then ta$="acht" If deck\typ = 8 Then ta$="neun" If deck\typ = 9 Then ta$="zehn" If deck\typ = 10 Then ta$="Bube" If deck\typ = 11 Then ta$="Dame" If deck\typ = 12 Then ta$="Koenig" If deck\typ = 13 Then ta$="Ass" Print fa$+ta$+" hat den Wert: "+deck\wert Next WaitKey End Data 1,2, 2,3, 3,4, 4,5, 5,6, 6,7, 7,8, 8,9, 9,10, 10,2, 11,3, 12,4, 13,11 ok, es werden alle karten mit namen ausgegeben. ABER, wie mische ich die? zwischenspeichern ohne array wird schwer. da bin ich mal gespannt ![]() ![]() ![]() |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
![]() |
bruZard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es muss nicht immer der eingeschlagene Weg derjenige sein der in alle Richtungen führt ![]() Lege alle Karten in ein Array, dann erzeugst Du Dein Type per Zufall: Code: [AUSKLAPPEN] Type karte Field wert End Type Dim blatt(31) ; -> Hier die Karten aus einem Data-Block oder einer ; externen Datei einlesen SeedRnd MilliSecs() For i=0 to 31 deck.karte=New Karte deck\wert=Rnd(31) Next Der Code ist sicher nicht komplett, mischt die Karten aber zuverlässig ![]() |
||
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32
User posted image |
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wenn ich mich nicht irre würde dein code nur 31 zufällige karten von 31 möglichkeiten liefern aber nicht mischen! denn es gibt auch doppelte usw. | ||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
![]() |
bruZard |
![]() Antworten mit Zitat ![]() |
---|---|---|
mein Code mischt einfach nur 32 Blätter ... Du müsstest ihn natürlich soweit ausbauen dass Du Deine Unterteilungen wieder hast. Das erreichst Du durch Zufallszahlen aus den verschiedenen Data-Blöcken. | ||
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32
User posted image |
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
kann es sein dass du dich irrst?
Code: [AUSKLAPPEN] For i=0 to 31
deck.karte=New Karte deck\wert=Rnd(31) Next das würde nur 32 zufallskarten mit doppelten und demnach auch fehlenden karten bewirken. sieh dir mein listing mit array an. das lasse ich ein komplettes set karten mit namen und wert GEMISCHT auflisten. keine doppelt und keine fehlt. weil es wirklich gemischt ist und nicht x-mal karte(rnd(1,x)). |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
merk dir in nem Array , ob du den schon verwendest hattest:
Dim schonverwendet(32) ... Repeat zufall=Rand(1,32) Until schonverwendet(zufall)=0 schonverwendet(zufall)=1 |
||
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
die frage war doch, ob es ohne arrays geht!
denn mit arrays habe ich die perfekte lösung schon... ok, mit dem qbasic-befehl SWAP wars nen 3-zeiler. in BB siehts so aus: Code: [AUSKLAPPEN] For nt=1 To 32
z=Rand(1,32) temp=kwert(t) ; kartenwert wird zwischengespeichert kwert(t)=kwert(z) ; karte n-te bekommt den wert von einer zufallskarte kwert(z)=temp ; diese zufallskarte bekommt nun den wert n-ten karte te$=kn$(t) ; das gleiche mit dem kartennamen kn$(t)=kn$(z) kn$(z)=te$ Next voila, 32 gemische karten mit namen und wert |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
du kannst doch auch Type UND Arrays verwenden oder wolltest du das nur mit Types schaffen?
Zitat: Code: [AUSKLAPPEN] For nt=1 To 32 z=Rand(1,32) temp=kwert(t) ; kartenwert wird zwischengespeichert kwert(t)=kwert(z) ; karte n-te bekommt den wert von einer zufallskarte kwert(z)=temp ; diese zufallskarte bekommt nun den wert n-ten karte te$=kn$(t) ; das gleiche mit dem kartennamen kn$(t)=kn$(z) kn$(z)=te$ Next Wo wird denn dort der schleifenwert nt verwendet? Irgendwas stimmt dort nicht! Außerdem verwendest du dort wieder Array! |
||
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das n bei nt ist mit reingerutscht. orginallisting im obersten post dieses threads.
und dieses listing soll zeigen, dass man zum mischen keine types braucht bzw es garnicht möglich ist. aber ich lasse mich gerne eines besseren belehren, falls doch. ich fühle mich geächtet wegen der verwendung von GOTO und DIM. hehe es kamen immer nur schlagworte wie: "nimm types" oder "scheiss code". aber es kommt nur wenig besseres |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
klar kann man Types einfach vertauschen ![]() sieht so aus Function Tauschen(d1.karte,d2.karte) if d1= null then return if d2= null then return local d3.karte = new Karte d3\wert=d2\wert d3\name=d2\name d2\wert=d1\wert d2\name=d1\name d1\wert=d3\wert d1\name=d3\name delete d3 end function |
||
walskiEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Markus2 hat Folgendes geschrieben: Function Tauschen(d1.karte,d2.karte) if d1= null then return if d2= null then return local d3.karte ;<- KEIN = new weil es ist ja schon da !!! d3\wert=d2\wert d3\name=d2\name d2\wert=d1\wert d2\name=d1\name d1\wert=d3\wert d1\name=d3\name end function Uiuiui... da wär ich GANZ vorsichtig! Das sind nämlich Seiteneffekte die kaum noch verkraftbar sind ![]() Außerdem wird folgendes passieren: Selbst wenn d1 und d2 GLOBAL sind, werden sie durch die Definition als Parameter der Function LOCAL in eben dieser Function. Dadurch tauscht du n paar Werte lokal in der Funktion und hast KEINERLEI Effekt nach Außen ![]() Aber der generelle Weg stimmt natürlich! Werte von 2 Listenfeldern tauschen geht Problemlos! Außerdem musst du ja nicht die Listen in sich tauschen sondern kannst jeder Karte ne ID geben und gibst den Spielern dann zufällige IDs. Das wäre wohl der sauberere Weg. walski |
||
buh! |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man könnte es evtl. auch mit den After, Before, First und Last Befehlen irgendwie machen. Müsste man allerdings sich ne gute Funktion ausdenken die nach Zufall die Karten irgendwohin verschiebt. | ||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@walski
War nen Denkfehler , hatte ich direkt korrigiert aber du warst mal wieder schneller bevor ich das editieren konnte ![]() Wenn man Types in der Function verändert wirken die auch nach außen . |
||
walskiEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ough sorry Markus, dann lag der Fehler wohl doch bei mir.
Ich hab das mit den Types nicht ganz geplant, aber ist ja logisch, ein Type=1 Liste in BB. Sorry für den Quatsch den ich geschrieben hab! ![]() walski |
||
buh! |
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hm, seid IHR sicher dass IHR die types kapiert habt?
ich seh da im moment noch keinen vorteil gegenüber dim-arrays (die ich liebe) ach übrigens. was spricht dagegen ALLE variablen global zu machen? |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
walskiEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was dagegen spricht?
Seiteneffekte bis zum Abwinken und daraus ein UNDEBUGGBARES Programm. Außerdem kannst du uns ruhig glauben, dass wir das verstanden haben und ich würde das nicht in Frage stellen, wenn du ernsthaft fragst was an einer globalen Deklarierung aller Variablen falsch ist... Zum Thema Arrays <-> Types: Types sind einfach dynamischer. Das ist ihr einziger Vorteil. Arrays mögen schneller sein, also entscheide einfach nach Bedarf was du brauchst. Eine immer gültige Antwort gibt es da einfach nicht! walski |
||
buh! |
storzi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jo, types sind dynamisch!
also praktisch zum beispiel bei einem strategiespiel wo immer neue einheiten dazukommen und verschwinden und so. aber bei einem kartenspiel wo du immer genau 32 karten hast kannst du doch ohne nachteile arrays verwenden ![]() |
||
http://www.splattergamez.de |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group