|
電腦遊戲製作開發設計論壇 任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
mimisa01 偶而上來逛逛的過客
註冊時間: 2009-11-05 文章: 7
146.17 果凍幣
|
發表於: 2009-11-5, AM 1:19 星期四 文章主題: 您好~我是個程式新手,想請教以下的程式段,有哪些部份可以改進呢? |
|
|
代碼: |
#include <stdio.h>
#include <stdlib.h>
main(){
char o[3][3]={'*', '*','*','*','*','*','*','*','*'};//宣告二維陣列元素
char who='O';//宣告字元變數O記憶在who位址
char l,k;//宣告字元變數記憶座標 ,比對是否輸入重覆用
int j,x,y,m,n;//宣告變數j=回合數,x=記憶座標x,y=記憶座標y,m=顯示座標x,n=顯示座標y
int owin,xwin,r;//宣告owin,xwin判斷是否平手用的變數,r=檢查最後一場勝負
printf ("\n");
for (m=0; m<=2; m++) {//顯示遊戲棋盤
for (n=0; n<=2; n++) {
printf(" %c ", o[m][n]);
};
printf("\n");
}
printf ("\n");
for (j=0; j<9; j++){//迴圈計算9次結束
/*判斷勝負O win*/
/*如果Owin,直接跳出迴圈,並給予數值1記錄*/
if ((o[0][0]=='O') && (o[0][1]=='O') && (o[0][2]=='O')||
(o[1][0]=='O') && (o[1][1]=='O') && (o[1][2]=='O' )||
(o[2][0]=='O') && (o[2][1]=='O') && (o[2][2]=='O' )||
(o[0][0]=='O') && (o[1][0]=='O') && (o[2][0]=='O' )||
(o[0][1]=='O') && (o[1][1]=='O') && (o[2][1]=='O' )||
(o[0][2]=='O') && (o[1][2]=='O') && (o[2][2]=='O' )||
(o[0][0]=='O') && (o[1][1]=='O') && (o[2][2]=='O' )||
(o[0][2]=='O') && (o[1][1]=='O') && (o[2][0]=='O' )){
owin=1;
break;
}
/*判斷勝負X win*/
/*如果Xwin直接跳出迴圈,並給予數值1記錄*/
if ((o[0][0]=='X') && (o[0][1]=='X') && (o[0][2]=='X')||
(o[1][0]=='X') && (o[1][1]=='X') && (o[1][2]=='X' )||
(o[2][0]=='X') && (o[2][1]=='X') && (o[2][2]=='X' )||
(o[0][0]=='X') && (o[1][0]=='X') && (o[2][0]=='X' )||
(o[0][1]=='X') && (o[1][1]=='X') && (o[2][1]=='X' )||
(o[0][2]=='X') && (o[1][2]=='X') && (o[2][2]=='X' )||
(o[0][0]=='X') && (o[1][1]=='X') && (o[2][2]=='X' )||
(o[0][2]=='X') && (o[1][1]=='X') && (o[2][0]=='X' )){
xwin=1;
break;
}
PunchInAgain://輸入錯誤時重新開始
printf("%c請輸入x座標(0~2):", who);//要求輸入 x 座標位置
scanf("%d", &x);//輸入 x 座標位置
printf("%c請輸入y座標(0~2):", who);//要求輸入 y 座標位置
scanf("%d", &y);//輸入 y 座標位置
if(x>=0 && x<=2 && y>=0 && y<=2){//判斷輸入的x,y值是否錯誤
}
else {
printf("輸入錯誤!!請輸入(0~2)\n");
goto PunchInAgain;//錯誤時重新輸入
}
l=o[x][y];//記憶剛輸入的座標位置
//比對是否輸入錯誤,l==k比對這場是否輸入錯誤,l==who比對OX是否同樣重覆下在同一步
if (l == k || l==who){
printf ("輸入錯誤!!\n");
goto PunchInAgain;//錯誤時重新輸入
}
o[x][y]=who;//記憶座標位置
k=o[x][y];//記憶下次比對座標位置
if (who=='O') who='X';//判斷如果是O的話就換X
else who='O';//否則為O
for (m=0; m<=2; m++) {//顯示目前下的進度
for (n=0; n<=2; n++) {
printf(" %c ", o[m][n]);
};
printf("\n");
}
}
for(r=0;r<1;r++){//檢查最後一次勝負,避免平手後無法跳離迴圈所以設定變數r<1
/*判斷勝負O win*/
/*如果Owin直接跳出迴圈,且給予數值1記錄,並列印勝負結果*/
if ((o[0][0]=='O') && (o[0][1]=='O') && (o[0][2]=='O')||
(o[1][0]=='O') && (o[1][1]=='O') && (o[1][2]=='O' )||
(o[2][0]=='O') && (o[2][1]=='O') && (o[2][2]=='O' )||
(o[0][0]=='O') && (o[1][0]=='O') && (o[2][0]=='O' )||
(o[0][1]=='O') && (o[1][1]=='O') && (o[2][1]=='O' )||
(o[0][2]=='O') && (o[1][2]=='O') && (o[2][2]=='O' )||
(o[0][0]=='O') && (o[1][1]=='O') && (o[2][2]=='O' )||
(o[0][2]=='O') && (o[1][1]=='O') && (o[2][0]=='O' )){
printf ("O win");
owin=1;
break;
}
/*判斷勝負X win*/
/*如果Xwin直接跳出迴圈,且給予數值1記錄,並列印勝負結果*/
if ((o[0][0]=='X') && (o[0][1]=='X') && (o[0][2]=='X')||
(o[1][0]=='X') && (o[1][1]=='X') && (o[1][2]=='X' )||
(o[2][0]=='X') && (o[2][1]=='X') && (o[2][2]=='X' )||
(o[0][0]=='X') && (o[1][0]=='X') && (o[2][0]=='X' )||
(o[0][1]=='X') && (o[1][1]=='X') && (o[2][1]=='X' )||
(o[0][2]=='X') && (o[1][2]=='X') && (o[2][2]=='X' )||
(o[0][0]=='X') && (o[1][1]=='X') && (o[2][2]=='X' )||
(o[0][2]=='X') && (o[1][1]=='X') && (o[2][0]=='X' )){
printf ("X win");
xwin=1;
break;
}
}
//判斷是否平手
if((xwin==1) || (owin==1)){
printf("遊戲結束\n");
}
else {
printf("平手\n");
}
system ("pause");
} |
附註:這是個井字遊戲
有關於輸入錯誤部份,如果不用goto語法的話,想請問,還有什麼方法可以直接繞回去?
謝謝指教 _________________ 一步一腳印 |
|
回頂端 |
|
|
yag Site Admin
註冊時間: 2007-05-02 文章: 689
2704.11 果凍幣
|
發表於: 2009-11-7, PM 12:27 星期六 文章主題: Re: 您好~我是個程式新手,想請教以下的程式段,有哪些部份可以改進呢? |
|
|
mimisa01 寫到: |
附註:這是個井字遊戲
有關於輸入錯誤部份,如果不用goto語法的話,想請問,還有什麼方法可以直接繞回去?
謝謝指教 |
用個do-while迴圈包起來就好了
設個flag變數先設為0
如果需要跳回去
就把它設成1
然後while判斷它為1時再做一次
另外你的變數名稱應該盡可能取有明確意義的名字
加註解是必要的
但不是加了註解就可以亂取名
程式的理解複雜度是看你必須同時在腦中記得幾樣東西
你如果亂取名
那看的人就必須記住每個名字跟註解的對應意義
會讓程式變得難以理解 |
|
回頂端 |
|
|
mimisa01 偶而上來逛逛的過客
註冊時間: 2009-11-05 文章: 7
146.17 果凍幣
|
發表於: 2009-11-9, AM 7:46 星期一 文章主題: |
|
|
謝謝教導....首先先看看flag怎麼使用,還有我的英文還要再加強QQ _________________ 一步一腳印 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 可以 在這個版面附加檔案 您 可以 在這個版面下載檔案
|
|