Hallo,
ich bins wieder, der mit dem Würfelspiel in C :)
Das Hardware Problem wurde inzwischen von meinem Lehrer behoben und ich
habe selbst noch weiterprogrammiert und ein Stücken geschafft. Und zwar
„würfeln“ jetzt alle Würfel und wenn man einen Schalter von einem
x-beliebigen Würfel betätigt hält dieser an und zeigt das gewürfelte
Ergebnis. Leider würfeln in der Zeit die anderen Würfel nicht weiter und
die restlichen Aufgabenpunkte fehlen auch noch da ich keine Ahnung habe
wie ich das realisieren soll.
Ich hoffe ihr könnt mir wieder ein wenig helfen, alleine schaffe ich das
nicht.
Hier ist noch mal der Link zu meinem letzten Thread:
Beitrag "Re: Würfelspiel programmieren in C, leider keine Ahnung wie"
Das Aufgabenblatt lade ich noch mal hoch.
Quelltext:
/**** globale Variablendeklaration
*******************************************************/
sfr Daten=0x90; //Port1
sfr Steuer=0x0A0; //Port2
sfr Schalter=0x0B0; //Port3
bit merker0;
bit merker1;
bit merker2;
bit merker3;
bit merker4;
char wuerfel [5]={0xFE,0xFD,0xFB,0xF7,0xEF}; //die 5 würfel
char leds [6]={0x01,0x04,0x05,0x0C,0x0D,0x0E}; //die zaheln 1-6
//char aus[1]={0x00};
sbit w0=Schalter^0;
sbit w1=Schalter^1;
sbit w2=Schalter^2;
sbit w3=Schalter^3;
sbit w4=Schalter^4;
int i,y,b;
long int x;
int blub;
/**** Funktionen
************************************************************************
*/
/**** Hauptprogramm
**********************************************************************/
main()
{
while(1) // Endlosschleife => Programmabbruch mit RESET
{
//Würfel 0
i=0;
while(!w0&&!w1&&!w2&&!w3&&!w4){
Daten=0x00;
for(i=0;i<=6;i++)
Steuer=wuerfel[i];
Daten=leds[blub];
for(x=0;x<=150;x++); //ich weis nicht wo das hinmuss
if(blub>5) blub=0;
else blub++;
}
if (w0==1){
Steuer=wuerfel[0];
Daten=leds[blub];
}
if (w1==1){
Steuer=wuerfel[1];
Daten=leds[blub];
}
if (w2==1){
Steuer=wuerfel[2];
Daten=leds[blub];
}
if (w3==1){
Steuer=wuerfel[3];
Daten=leds[blub];
}
if (w4==1){
Steuer=wuerfel[4];
Daten=leds[blub];
}
} // Ende der Endlosschleife
} // END MAIN
Mit freundlichen Grüßen,
Carsten
Carsten Stulgies schrieb:
> habe selbst noch weiterprogrammiert und ein Stücken geschafft. Und zwar> „würfeln“ jetzt alle Würfel und wenn man einen Schalter von einem> x-beliebigen Würfel betätigt hält dieser an und zeigt das gewürfelte> Ergebnis. Leider würfeln in der Zeit die anderen Würfel nicht weiter
Ich würde mal sagen, da würfelt überhaupt nur 1 Würfel. blub (welch
selten dämlicher Name) hält die Augenzahl eines Würfels. Zumindest ist
das die einzige Variable, die würfelähnliches Verhalten einprogrammiert
bekommen hat.
> if(blub>5) blub=0;> else blub++;
Du hast ergo nur einen einzigen Würfel in deinem Programm, zeigst diesen
aber auf allen LED-Würfel an. Kein Wunder, dass die immer alle dasselbe
anzeigen.
Du brauchst 5 Variablen, wobei jede einzeln die Augenzahl eines eigenen
Würfels repräsentiert.
Hallo,
vielen Dank für die Antworten, das mit dem Einrücken tut mir leid wie
haben das in der Schule groß nicht gelernt, aber ich habe mich bemüht
das ganze ein wenig übersichtlicher zu gestalten.
Also, ich habe jetzt auf kbuchegg´s Rat für jeden Würfel eine eigene
Schleife zum durchwürfeln. Aktuell sieht es so aus das alle Würfel
würfeln und wenn man einen schalter betätigt geht der entsprechende
Würfel aus und die restlichen würflen weiter. Leider zeigt der gestoppte
Würfel kein Ergebnis mehr an. Ich hoffe ihr könnt mir sagen woran das
liegt und wie ich die reslichen Aufgabenpunkte angehen soll.
Ich freue mich über Antworten.
Mir freundlichen Grüßen,
Carsten
Primär liegt das meiner Meinung nach daran, dass du ziemlich konzept-
und planlos an die Sache rangehst
Wie wäre es damit
1
intAugenZahl1;// Die Augenzahl von Würfel 1 0..5
2
intAugenZahl2;// Die Augenzahl von Würfel 2 0..5
3
intAugenZahl3;// Die Augenzahl von Würfel 3 0..5
4
intAugenZahl4;// Die Augenzahl von Würfel 4 0..5
5
intAugenZahl5;// Die Augenzahl von Würfel 5 0..5
6
7
...
8
9
10
intmain()
11
{
12
...
13
14
while(1){
15
16
// behandle Würfel 1
17
// wenn sein Schalter auf ein steht, dann würfelt er und
18
// zählt seine Augenzahl rum. Wenn nicht, dann macht er nichts
19
if(w0==0){
20
AugenZahl1++;
21
if(AugenZahl1>5)
22
AugenZahl=0;
23
}
24
25
// Würfel 1 hat gewürfelt (oder auch nicht, je nach Schalter)
26
// aber auf jeden Fall kann seine Augenzahl angezeigt werden
27
Steuer=wuerfel[0];
28
Daten=leds[AugenZahl1];
29
30
// Ein wenig warten, damit die LEDs auch leuchten können
31
wait();
32
33
34
// behandle Würfel 2
35
// wenn sein Schalter auf ein steht, dann würfelt er und
36
// zählt seine Augenzahl rum. Wenn nicht, dann macht er nichts
37
if(w1==0){
38
AugenZahl2++;
39
if(AugenZahl2>5)
40
AugenZah2=0;
41
}
42
43
// Würfel 2 hat gewürfelt (oder auch nicht, je nach Schalter)
44
// aber auf jeden Fall kann seine Augenzahl angezeigt werden
45
Steuer=wuerfel[0];
46
Daten=leds[AugenZahl2];
47
48
// Ein wenig warten, damit die LEDs auch leuchten können
49
wait();
50
51
...
52
}
53
}
54
55
voidwait()
56
{
57
intx;
58
59
for(x=0;x<150;+x)
60
;
61
}
Deine Code formatierung ist immer noch scheuslich. Bei jeder öffnenden {
wird das nachfolgende eingerückt, bis wieder die schliessende } kommt!
Viel zuviele Variablen für nichts uasser dass man ständig überall
rumkopieren muss. Da gibts die io und die merker und eigentlich machen
alle dasselbe.
> Leider zeigt der gestoppte Würfel kein Ergebnis mehr an.
Doch das tut er. Aber er tut es so kurz, dass du es nicht mehr siehst.
>das mit dem Einrücken tut mir leid wie>haben das in der Schule groß nicht gelernt, aber ich habe mich bemüht>das ganze ein wenig übersichtlicher zu gestalten.
Naja, aber sieht ja schon besser aus, aber Rücke mit Tabs ein, nicht mit
Leerzeichen.
Jedes mal nach "{" und Enter kommt einfach noch ein Tab, wenn du einen
guten Editor hast, der nicht nach jedem Enter wieder an den Zeilenanfang
geht.
Und zwischendrin haste auch einige vergessen.
Durch das wird der Code schon gut lesbar.
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.