C游戲編程從入門到精通 c游戲編程( 二 )


fillellipse(x,y,15,15);
key=bioskey(0);/*接收按鍵*/
if(key==ESC)/*跳出游戲*/
break;
if(key==ENTER)/*如果按鍵確定就可以跳出循環*/
if(y!=80&&a[(x-120)/40][(y-120)/40]!=1
&&a[(x-120)/40][(y-120)/40]!=2)/*如果落子位置沒有棋子*/
if(t%2==1)/*如果是棋手1移動*/
a[(x-120)/40][(y-120)/40]=1;
else/*否則棋手2移動*/
a[(x-120)/40][(y-120)/40]=2;
if(!QpChange(x,y,t))/*落子后判斷棋盤的變化*/
a[(x-120)/40][(y-120)/40]=0;/*恢復空格狀態*/
cc++;/*開始統計嘗試次數*/
if(cc>=64-score1-score2)/*如果嘗試超過空格數則停步*/
MoveColor(x,y);
fillellipse(x,y,15,15);
break;
continue;/*如果按鍵無效*/
DoScore();/*分數的改變*/
break;/*棋盤變化了,則輪對方走棋*/
else/*已經有棋子就繼續按鍵*/
continue;
else/*四個方向按鍵的判斷*/
if(key==LEFT&&x>120)/*左方向鍵*/
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
x-=40;
fillellipse(x,y,15,15);
if(key==RIGHT&&x<400&&y>80)/*右方向鍵*/
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
x+=40;
fillellipse(x,y,15,15);
if(key==UP&&y>120)/*上方向鍵*/
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
y-=40;
fillellipse(x,y,15,15);
if(key==DOWN&&y<400)/*下方向鍵*/
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
y+=40;
fillellipse(x,y,15,15);
if(key==ESC)/*結束游戲*/
break;
if((score1+score2)==64||score1==0||score2==0)/*格子已經占滿或一方棋子為0判斷勝負*/
playWin();/*輸出最后結果*/
break;
t=t%2+1;/*一方走后,改變棋子顏色即輪對方走*/
cc=0;/*計數值恢復為0*/
}/*endwhile*/
voidSetPlayColor(intt)/*設置棋子顏色*/
if(t%2==1)
setfillstyle(SOLID_FILL,15);/*白色*/
setfillstyle(SOLID_FILL,8);/*灰色*/
voidMoveColor(intx,inty)/*走了一步后恢復原來格子的狀態*/
if(y<100)/*如果是從起點出發就恢復藍色*/
setfillstyle(SOLID_FILL,BLUE);
else/*其他情況如果是1就恢復白色棋子,2恢復黑色棋子,或恢復藍色棋盤*/
switch(a[(x-120)/40][(y-120)/40])
case1:
setfillstyle(SOLID_FILL,15);break;/*白色*/
case2:
setfillstyle(SOLID_FILL,8);break;/*黑色*/
default:
setfillstyle(SOLID_FILL,BLUE);/*藍色*/
intQpChange(intx,inty,intt)/*判斷棋盤的變化*/
inti,j,k,kk,ii,jj,yes;
yes=0;
i=(x-120)/40;/*計算數組元素的行下標*/
j=(y-120)/40;/*計算數組元素的列下標*/
SetPlayColor(t);/*設置棋子變化的顏色*/
/*開始往8個方向判斷變化*/
if(j<6)/*往右邊*/
for(k=j+1;k<8;k++)
if(a[i][k]==a[i][j]||a[i][k]==0)/*遇到自己的棋子或空格結束*/
break;
if(a[i][k]!=0&&k<8)
for(kk=j+1;kk a[i][kk]=a[i][j];/*改變棋子顏色*/
fillellipse(120+i*40,120+kk*40,15,15);
if(kk!=j+1)/*條件成立則有棋子改變過顏色*/
yes=1;
if(j>1)/*判斷左邊*/
for(k=j-1;k>=0;k–)
if(a[i][k]==a[i][j]||!a[i][k])
break;
if(a[i][k]!=0&&k>=0)
for(kk=j-1;kk>k&&k>=0;kk–)
a[i][kk]=a[i][j];
fillellipse(120+i*40,120+kk*40,15,15);
if(kk!=j-1)
yes=1;
if(i<6)/*判斷下邊*/
for(k=i+1;k<8;k++)
if(a[k][j]==a[i][j]||!a[k][j])
break;
if(a[k][j]!=0&&k<8)
for(kk=i+1;kk a[kk][j]=a[i][j];
fillellipse(120+kk*40,120+j*40,15,15);
if(kk!=i+1)
yes=1;
if(i>1)/*判斷上邊*/

相關經驗推薦