ゲーム
Posted: 2007年1月19日(金) 16:24
こんにちは。また分からない問題がでましたので、質問しに来ました。
まず、
これを、
セーブとロードと1つ前に戻るを可能にしたいのです。
ファイルの入出力をつかって
FILE *fout;
fout=fopen("diskfile","w");でセーブ、wをrにしてロードをつくるようなことを考えているのですが、できませんでした。
それと、1つ戻るは今のところ考えつきません。逆のことをやるようにするとは思うのですが。
いろいろ調べてはみたのですが、分かりませんでした。すみませんが、どなたか教えてください。お願いします。
まず、
#include <stdio.h>
#define VT 10
#define HZ 10
int next [VT][HZ];
int now [VT][HZ]={{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0},
{0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
void calc_cell(int v,int h){
int work;
work=now[(v+VT-1)%VT][(h+HZ-1)%HZ]+now[(v+VT-1)%VT][(h+HZ)%HZ]+now[(v+VT-1)%VT][(h+HZ+1)%HZ]
+now[(v+VT)%VT][(h+HZ-1)%HZ] +now[(v+VT)%VT][(h+HZ+1)%HZ]
+now[(v+VT+1)%VT][(h+HZ-1)%HZ]+now[(v+VT+1)%VT][(h+HZ)%HZ]+now[(v+VT+1)%VT][(h+HZ+1)%HZ];
next[v][h]==0;
if(now [v][h]==0 && work==3)next[v][h]==1;
if(now [v][h]== 1 && work==2 || work == 3) next[v][h]==1;
}
void copystatus(void) {
int v,h;
for( v=0;v<VT;v++)
for(h=0;h<HZ;h++)
now[v][h]=next[v][h];
}
void showstatus(void){
int v,h;
for(v = 0; v< VT; v++) {
for(h= 0; h<HZ; h++)
if(now[v][h]==1)printf("*");
else printf(" ");
printf("\n");
}
}
void cls() {
printf("\033[2J");
}
main() {
int v,h;char com='c';
while(com!='q'){
cls();showstatus();
for(v=0;v<VT;v++)
for(h=0;h<HZ;h++)calc_cell(v,h);
copystatus();
printf("続ける:n セーブ:s ロード:l 戻る:r 終了:q\n");
scanf("%s",&com);
}
}
といったライフゲームをつくりました。これを、
セーブとロードと1つ前に戻るを可能にしたいのです。
ファイルの入出力をつかって
FILE *fout;
fout=fopen("diskfile","w");でセーブ、wをrにしてロードをつくるようなことを考えているのですが、できませんでした。
それと、1つ戻るは今のところ考えつきません。逆のことをやるようにするとは思うのですが。
いろいろ調べてはみたのですが、分かりませんでした。すみませんが、どなたか教えてください。お願いします。