Hi ich bin relativ neu in der avr materie, hab aber jetzt schon das zweite funktionierende board mit einem mega8 aufgebaut, welches ein 8*8 led display per multiplex ansteuert. nachdem ich die prozedur zum zeichnen zusammengeschustert hab, hab ich damit begonnen snake zu programmieren und bin jetzt auch sogut wie fertig damit, stehe aber vor einem kleinem problem, an dem ich aber nicht recht weiter weiß: die "kirschen" (also die fressbaren objekte) werden komischerweise manchmal gar nicht, und manchmal erst nachdem sie gefressen wurden angezeigt. ich versteh nicht recht woher das kommen kann, da die zeichenroutine tadellos läuft und der rest eig auch... wäre schön wenn jmnd mit ein bisschen durchblick den code mal durchschauen kann... wahrscheinlich ist es nur irgendein trivialer fehler, irgendein problem von bascom mit den variablen oder so... (hatte schon einige probleme mit den arrays und das mit temp variablen gelöst) falls noch an anderen stellen kleinere fehler oder verbesserungsvorschläge auftauchen immer her damit :) und schonmal im vorraus vielen dank...
achso vlct zur erklärung: multidata + multiclock sind die zwei ansclüsse für das schieberegister das die zeile ansteuert (schiebt quasi die akive spalte immer eins weiter) reihendata + reihenclock sind die anschlüsse für das schieberegister für die zeile (füllt sich immer mit 8 bits) vlct könnte ein nett mod die 2 posts zusammenschieben, als gast gibts scheinbar ja kein edit...
fuxxx wrote: > vlct könnte ein nett mod die 2 posts zusammenschieben, als gast gibts > scheinbar ja kein edit... Wie soll denn ein EDIT als Gast bitte funktionieren? Melde Dich doch einfach an. Olli
das sollte keine kritik sein... ich dachte mir nur das vlct ein netter mod der übersicht wegen das mal eben zusammenschubst. (bin selbst mod in einem nicht alzu kleinem forum ;) ) also hat jmnd ne idee oder ne frage zu dem code? (ich hoffe mal das die kommentare im code helfen...)
fuxxx wrote: > das sollte keine kritik sein... > (bin selbst mod in einem nicht alzu kleinem forum ;) ) Sollte keine Kritik sein. Ich kann mir nur nicht vorstellen, wie eine Edit-Funktion fuer nicht angemeldete Gaeste funktionieren soll. Olli
da hast du allerdings recht... hab mich jetzt auch brav angemeldet und kann jetzt editieren :) also hat jmnd eine ahnung warum meine kirschen verschwinden könnten?
hab heute nochmal mit einem freund, der zwar kein bascom aber visual basic kann den code kontrolliert. und er hat den fehler gefunden: bei position steht statt xp und yp (den übergebenen parametern) x und y (die globalen variablen) beim zeichnen der schlange hab ich wohl zufällig vorher immer schön x und y gesetzt sodass es trotzdem geklappt hat... (hatte diese stelle schonmal gesehen und eig korriegiert, muss wohl iwann die falsche version geöffnet haben -.-) jetzt gehts an die optimierung und erweiterung... noch hab ich ein kleines problem mit "geisterpixeln"... scheinbar ist das auge schnell genug um die leds zu sehen, die an sind, wenn gerade die daten durch die schieberegister geschoben werden. ein mega8 kann doch mit einem 16 mhz quarz arbeiten oder? wenn das nicht hilft werd ich die led evtl per transistor immer zum zeitpunkt des neubeladens des reihenschieberegisters ausschalten. ausserdem wird das ganze demnächst noch auf 16*16 pixel erweitert :)
jetzt taucht ein anderer fehler auf... irgendwann (meist so nach 20 kirschen) wird scheibar gar keine neue mehr generiert. erzeugt diese zeile so wie sie soll immer werte für x und y zwischen 1 und 8?
1 | Kirsche_x = Rnd(8) |
2 | Kirsche_x = Kirsche_x + 1 |
3 | Kirsche_y = Rnd(8) |
4 | Kirsche_y = Kirsche_y + 1 |
oder hab ich mich da vertan? (warum kann ich auf einmal die edit funktion nicht mehr verwenden? oO)
Andre Wurl wrote: > erzeugt diese zeile so wie sie soll immer werte für x und y zwischen 1 > und 8?
1 | Kirsche_x = Rnd(8) |
2 | Kirsche_x = Kirsche_x + 1 |
3 | Kirsche_y = Rnd(8) |
4 | Kirsche_y = Kirsche_y + 1 |
Ja. Und das funktioniert ja auch zumindest fuer die ersten 20, wie Du
schreibst. Hat sich am Quallcode etwas ausser dem korrigierten Fehler
veraendert? ich guck dann noch mal drauf.
> (warum kann ich auf einmal die edit funktion nicht mehr verwenden? oO)
Das geht nur eine gewisse Zeit nach Erstellen des Beitrages. Alte kannst
Du nur noch loeschen :-)
Olli
ein paar kleinere änderungen sind dazugekommen. vorallem eine kleine korrektur bei ne_game und ein bisschen aufräumen von überflüssigen variablen. der übersichtlichkeit lad ich die neue version hier nochmal hoch... und ich dacht schon ich werd auf meine jungen jahre senil. im einem augenblick war der edit button noch da, im nächsten nicht mehr :D wäre nett wenn du nochmal durchgucken könntest :)
so ich hab nochmal ein bisschen probegezockt... der random scheint immer die gleichen 4 positionen zu liefern und das auch immer in der gleichen reihenfolge. das problem das keine kirsche mehr erscheint kommt, wenn die schlange auf all diesen positionen liegt. in dem moment scheint das display kurz zu stocken, sodass man einen ganz kurzen ruckler wahrnimmt. ich würde daher sagen, dass diese zeilen hier immer wieder durchlaufen werden, bis sie irgendwann etwas falsches auswerfen
1 | Do
|
2 | Temp = 0 |
3 | Kirsche_x = Rnd(8) |
4 | Kirsche_x = Kirsche_x + 1 |
5 | Kirsche_y = Rnd(8) |
6 | Kirsche_y = Kirsche_y + 1 |
7 | For I = 1 To Laenge |
8 | X = Schlange_x(i) |
9 | Y = Schlange_y(i) |
10 | If X = Kirsche_x Then |
11 | If Y = Kirsche_y Then |
12 | Temp = 1 |
13 | End If |
14 | End If |
15 | Next I |
16 | Loop Until Temp = 0 |
1. frage wäre wie man dem rnd beibringt, immer andere werte zu generieren statt immer wieder die 4 gleichen. 2. frage ist, warum das ganze trotzdem nicht einfach in dem loop immer weiter im kreis läuft...? könnte es sein, dass eine isr routine da irgendwie zwischenfunkt? wäre sehr erfreut wenn mir hier jmnd helfen könnte oder neue anregungen gibt...
Ich kenn mich zwar mit Bascom garnicht aus, aber dass Rnd(8) immer die gleichen werte liefert ist schon mieß ;) Du könntest Rnd(255)/32 Probieren, wenn Bascom das richtig macht dürfte das auch nicht resourcen fressender sein, da /32 durch rechts shiften in hardware erledigt werden kann.
PS: Edit für Gäste wäre kein Problem, wenn man die IP überprüfen würde und den Editknopf nur für ca 10 min aktiv machen würde.....
ich hab die idee mit den größeren werten für rnd() mal ausprobiert:
1 | $regfile = "m8def.dat" |
2 | $crystal = 8000000 |
3 | $baud = 19200 |
4 | Osccal = &HAE |
5 | |
6 | $sim |
7 | |
8 | Dim Kirsche_x As Word |
9 | Dim Kirsche_y As Word |
10 | |
11 | Do
|
12 | Kirsche_x = Rnd(65536) |
13 | Kirsche_x = Kirsche_x Mod 8 |
14 | Kirsche_x = Kirsche_x + 1 |
15 | |
16 | Kirsche_y = Rnd(65536) |
17 | Kirsche_y = Kirsche_y Mod 8 |
18 | Kirsche_y = Kirsche_y + 1 |
19 | Loop
|
das ist mein komplettes programm. wenn ichs mit bascom simuliere kommt wieder nach 4 ausführungen genau das gleiche. kann es sein das der rnd befehl einen "init" braucht, oder dass ihn iwas stört? in delphi brauch der random befehl zb ein randomize um sich zu initialisieren... <offtopic> bin ich hier zufällig in einem nicht-bascom forum gelandet? oder hat von den bascom leuten hier keinehilfe für mich? ^^ @peter: ich versteh schon das es einen solchen edit knopf nicht gibt, wollte mich auch keineswegs darüber beschweren... ich will auch keineswegs eine disskusion darüber führen ;) </offtopic> edit: ich hab gerade die lösung für das problem gefunden: man kann indem man die varaible "___rseed" neu setzt, einen neuen anfangswert für den random bestimmen. also setz ich einfach ___rseed immer auf timer0 und ferig :) scheint auch zu klappen :) anbei der neue code, falls jmnd noch verbesserungsvorschläge hat immer her damit
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.