009
14.02.2005, 16:34 Uhr
FBIagent
|
Ich hab das fwrite(); und das fread(); eingebaut.
Ich hab jetzt aber noch ein problem(0xC0000005: Access Violation):
Accsess Violation kommt immer dann vor, wenn ich einem Teil des Arrays filed ein Zeichen zuweisen möchte und wenn ich einen Teil des Arrays field ausgeben möchte! Ich weis aber nicht warum.
Was ist eigentlich Accsess Violation genau?
Ich habe mal den ganzen QTXT gepostet, weil ihr mir dann warscheinlich schneller helfen könnt!
Code: |
//Header Dateien #include <stdio.h> #include <conio.h> #include <windows.h>
//Variablen Deklarationen #define filename "field.fcm" char field[78][22]; char player,sign,key,sign; int x,y,posx,posy,points; FILE *stream;
int gotoxy(int x, int y){ HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X=x-1; pos.Y=y-1; SetConsoleCursorPosition(hCon, pos); return 0; }//Setzt den Cursor an eine bestimmte Position(nicht von mir)
int clrline(int line){ int x; gotoxy(1,line); for(x=1;x<81;x++){ printf(""); } return 0; }//Zeile Löschen
int cout_points(){ int x,y,cout; cout=0;
for(y=0;y<23;y++){ for(x=0;x<79;x++){ key=field[x][y]; if(key=='.') cout++; } } return cout; }//Körner zählen
int init(){ //Variablen Dekleration int x,y; //Variablen initialisieren points=0; posx=1; posy=1; player='#'; sign='.';
//Feldarray initialisieren if((stream=fopen(filename,"r"))!=NULL){ stream=fopen(filename,"r"); fread(field, 1, sizeof(field), stream); fclose(stream); } else{ for(y=0;y<23;y++){ for(x=0;x<79;x++){ field[x][y]='|'; } } }
//Setzt Spielerzeichen auf position im Array field[posx][posy]='#';
//Spielfeld wird ausgegeben for(y=0;y<23;y++){ for(x=0;x<79;x++){ gotoxy(x+1,y+2); printf("%c",field[x][y]); } }
//Körner zählen und ausgeben points=cout_points(); gotoxy(1,25); printf("%i Koerner gesetzt",points);
return 0; }//Initialisierngs Funktion
int keypress(){ //Wenn eine taste gedrückt wurde, wird diese in keypressed gespeichert if(kbhit()){ key=getch(); } return 0; }//Tastaturfunktion
int sign_chioce(){ if(key=='g') sign='.'; if(key=='m') sign='|'; return 0; }
int calculate_output(){
//Wenn keypress nicht 0 ist, dann wird an der Position des Spielers das ausgewählte Zeichen ausgegeben if(key!=0){ field[posx][posy]=sign; gotoxy(posx+1,posy+2); printf("%c",field[posx][posy]); }
//Berechnung der Bewegung switch(key){ case 72: if(posy>1) posy--; break; case 80: if(posy<21) posy++; break; case 75: if(posx>1) posx--; break; case 77: if(posx<77) posx++; }
//Spielerzeichen wir an seiner Position in das Array gegeben und ausgegeben field[posx][posy]=player; gotoxy(posx+1,posy+2); printf("%c",field[posx][posy]);
if(key!=0 && key!=27){ //Körner zählen und ausgeben points=cout_points(); clrline(25); gotoxy(1,25); printf("%i Koerner gesetzt",points); } //keypress wird auf 0 gesetzt wenn keypress vorher nicht den Dezimalwert 27 hat if(key!=27) key=0; return 0; }//Berechnung und Neuausgabe
int ending(){ stream=fopen(filename,"w"); fwrite(field, 1, sizeof(field), stream); fclose(stream); return 0; }//Funktion nach beendigung des Spiels
int main(){
init(); do{ keypress(); sign_chioce(); calculate_output(); }while(key!=27); ending(); }//Hauptfunktion
|
THX MFG Christian -- Bill Gates is watching you.... Dieser Post wurde am 14.02.2005 um 16:38 Uhr von FBIagent editiert. |