Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
The_Muh aka Mark Aroni
Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 17.08.2007, 00:05 Titel: "Karten"-mischen |
|
|
Ich will ein programm basteln, das so etwas kann wie karten mischen...
die karten sind in dem fall zahlen von 1-36 bzw. 1-32 die in unterschiedlicher reihenfolge im screen/ text fenster angezeigt werden sollen (gleichzeitig).
Norm. würde ich sagen randomize timer (int(rnd*32)+1)
aber wenn alle gleichzeigig dargestelltwerden sollen, ist das problem da, das bestimmte karten doppelt auftauchen würden, wie kann ich das ohne viel aufwand (und code) lösen? _________________ // nicht mehr aktiv // |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 17.08.2007, 00:13 Titel: |
|
|
Code: |
Randomize Timer
Dim test(1 to 10) as integer
locate 1,1
for l as integer=1 to 10
test(l)=l
?l;test(l)
next l
'' hier wird gemischt!!
Dim Shuf1 as Integer
Dim Shuf2 as Integer
for l as integer=0 to int(rnd*100)+1
Shuf1=int(rnd*UBound(test))+1
Shuf2=int(rnd*UBound(test))+1
swap Test(Shuf1),Test(Shuf2)
next l
''mischen ende...
for l as integer=1 to 10
locate l,40:?l;test(l)
next l
sleep
|
_________________
|
|
Nach oben |
|
|
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 17.08.2007, 00:16 Titel: |
|
|
Rein zufällig, aber der Code funzt
Code: | randomize timer
const karten = 32
dim karte_gelegt(1 to karten) as integer
dim as integer karte,gelegte_karten
do
karte=int(rnd *karten)+1
if karte_gelegt(karte)=0 then
print karte
gelegte_karten + = 1
end if
karte_gelegt(karte)=1
loop until gelegte_karten = karten
sleep |
//Edit
Wenn noch etwas fehlt wird der code dementsprechend optimiert
Aber ich denke, dass die fehlenden sachen man da leicht hinzufügen kann.
Mit der constante Karten kann selber entschieden werden ob es nun 32 oder doch 36 sind
Wie das geht, ist wohl klar..
Dieser Code sollte es verdeutlichen
Code: | randomize timer
const karten = 10
dim karte_gelegt(1 to karten) as integer
dim as integer karte,gelegte_karten
do
karte=int(rnd *karten)+1
if karte_gelegt(karte)=0 then
print "neue karte = ";karte
gelegte_karten + = 1
else
print "doppelte karte = ";karte
end if
karte_gelegt(karte)=1
loop until gelegte_karten = karten
sleep |
Es werden einfach bereits vorhandene Zahlen gefiltert.
Das ist Zwar nicht die schnellste Methode, aber für bis zu 1000 Zahlen die einfachste , ab dann die die Geschwindigkeit merklich nachlässt. (Insbesondere, wenn noch weiterer Code mit einflisst.) _________________ Bis irgendwann... |
|
Nach oben |
|
|
The_Muh aka Mark Aroni
Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 17.08.2007, 00:53 Titel: |
|
|
ich denke mal das genau an solchen stellen die schwachstellen einer programmiersprache erkennbar sind...
nicht jedes problem lässt sich schnell UND einfach lösen... entweder man beansprucht die CPU ODER hat 200 zeilen mehr code, um das ganze mal drastisch darzustellen...
danke für die hilfe, ich werd morgen mal das programm zuende basteln damit meine mutter watt zum "spielen" hat
(sie legt karten... deswegen die 36 ) _________________ // nicht mehr aktiv // |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 17.08.2007, 00:57 Titel: |
|
|
AndT wenn Du Dir mein Beispiel angesehen haettest, haettest Du gemerkt das es genau das Tut, was erfragt wurde, und zwar mischen ohne das ich irgendwo pruefen muss ob irgendwo was doppelt ist ect.. einfacher gehts nun wirklich nicht mehr...
Edit:
http://forum.qbasic.at/viewtopic.php?t=4588 _________________
|
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 17.08.2007, 21:41 Titel: |
|
|
Im Übrigen hatten wir vor kurzem schon eine Diskussion über Mischverfahren am Laufen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
|