日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简易双人五子棋

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简易双人五子棋 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在最初學習了C語言和數據結構后就嘗試著寫寫一個較為高端的程序,這個高端也是相對于當時掌握的只是來說的,于是我便寫了這個簡易小游戲,雙人五子棋。由于水平有限,寫的很粗糙,不過不管怎么說也是第一個獨自完成的大點的程序,還有就是這個調試環境為DEV C++。下面是這個程序的代碼: #include <windows.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <conio.h> #define STACK_SIZE 81 #define TRUE 1 #define FALSE 0 typedef int ElemType; typedef struct {int qp[15][15];int sum[5];int ch;int yon; }data; typedef struct Node {ElemType data[10];int top; }seqstack; void initStack(seqstack *s) {s->top = -1; } int Empty(seqstack *s) {return (s->top == -1); } int Full(seqstack *s) {return (s->top == STACK_SIZE - 1); } int push(seqstack *s, ElemType elem) {if(Full(s))return FALSE;s->top++;s->data[s->top] = elem;return TRUE; } int pop(seqstack *s, ElemType *elem) {if(Empty(s))return FALSE;*elem = s->data[s->top];s->top--;return TRUE; } void wqizi() {printf("●"); } void bqizi() {printf("○"); } void gotoxy(int x,int y) //通過坐標獲取光標位置 {COORD pos;pos.X=x;pos.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); } void qipan( )//棋盤界面 { int MAX=29; int i,j; for( i= 1; i<= MAX; ++i ){for( j= 1; j<=MAX; ++j ){if( i== 1 ){if( j== 1 )printf( "┏" ); else if( j== MAX )printf( "┓\n" );else if( j%2 )printf( "┳" ); // 橫向占兩個坐標位,豎向占一個坐標位 elseprintf( "━" );}else if( i== MAX ){if( j== 1 )printf( "┗" );else if( j== MAX )printf( "┛\n" );else if( j%2 )printf( "┻" );elseprintf( "━" );}else{if( j== 1 ){if( i% 2 )printf( "┣" );elseprintf( "┃" );}else if( j== MAX ){if( i% 2 )printf( "┫\n" );elseprintf( "┃\n" );}else{if( i% 2 ){if( j% 2 )printf( "╋" );elseprintf( "━" );}else{if( j% 2 )printf( "┃" );else printf( " " ); }}}}}gotoxy(60,12);printf("上下左右分別通");gotoxy(60,14);printf("過W,S,A,D按鍵");gotoxy(60,16);printf("來控制,落子通");gotoxy(60,18);printf("過按鍵Y來實現"); } judgeL(seqstack *le,data *da,int x,int y,int xz)//判斷水平方向是否滿足獲勝條件 {int r1,m;r1=x;da->sum[1]=0;initStack(le);while(da->qp[r1][y]==xz){r1--;}m=r1+1;while(da->qp[m][y]==xz){push(le, da->qp[m][y]);m++;}while(!Empty(le)) {int tmp;pop(le, &tmp);da->sum[1]=da->sum[1]+tmp;} } judgeV(seqstack *le,data *da,int x,int y,int xz)//判斷豎直方向是否滿足獲勝條件 {int r1,m;r1=y;da->sum[2]=0;initStack(le);while(da->qp[x][r1]==xz){r1--;}m=r1+1;while(da->qp[x][m]==xz){push(le, da->qp[x][m]);m++;}while(!Empty(le)) {int tmp;pop(le, &tmp);da->sum[2]=da->sum[2]+tmp;} } judge45(seqstack *le,data *da,int x,int y,int xz)//判斷向左45度是否滿足獲勝條件 {int r1,r2,m1,m2;r1=x;r2=y;da->sum[3]=0;initStack(le);while(da->qp[r1][r2]==xz){r1--;r2--;}m1=r1+1;m2=r2+1;while(da->qp[m1][m2]==xz){push(le, da->qp[m1][m2]);m1++;m2++;}while(!Empty(le)) {int tmp;pop(le, &tmp);da->sum[3]=da->sum[3]+tmp;} } judge135(seqstack *le,data *da,int x,int y,int xz)//判斷向右45度是否滿足獲勝條件 {int r1,r2,m1,m2;r1=x;r2=y;da->sum[4]=0;initStack(le);while(da->qp[r1][r2]==xz){r1++;r2--;}m1=r1-1;m2=r2+1;while(da->qp[m1][m2]==xz){push(le,da->qp[m1][m2]);m1--;m2++;}while(!Empty(le)) {int tmp;pop(le, &tmp);da->sum[4]=da->sum[4]+tmp; } } void weizhi(data *da,int x,int y)//用來判斷此位置是否已經落子 {if(da->qp[x][y]==1 || da->qp[x][y]==2){gotoxy(65,10);printf("此位置不合法");Sleep(1000);gotoxy(65,10);printf(" ");fflush(stdout); da->ch=1; } } zlyj(seqstack *le,data *da)//讓用戶選擇是否再來一局 {int s=0;da->yon=0;gotoxy(20,9);printf("按Y再來一局,按N退出");da->yon=getch();while(da->yon!='Y' && da->yon!='y' && da->yon!='N' && da->yon!='n'){da->yon=getch();}if(da->yon=='Y' || da->yon=='y'){gotoxy(0,0);qipan();dire(le,da);}if(da->yon=='N' || da->yon=='n')da->yon=1; } void dire(seqstack *le,data *da)//用來控制棋子的移動及落子操作的實現 {int x=0,y=0,a,b,n=1,pd=2;int i,j,m,o[3]={0,0,0};gotoxy(65,5);printf("執黑子行");gotoxy(x,y);for(i=0;i<=15;i++)for(j=0;j<=15;j++)da->qp[i][j]=0;da->qp[x][y]=0;while(1){int sum1,sum2;a=getch();b=pow(-1,n);if(a=='a' || a=='A'){if(x<1)continue; gotoxy(4*(x-1),y*2);x=x-1;pd=1;}if(a=='d' || a=='D'){if(x>13)continue;gotoxy((x+1)*4,y*2);x=x+1;pd=1;}if(a=='w' || a=='W'){if(y<1)continue;gotoxy(x*4,(y-1)*2);y=y-1;pd=1;}if(a=='s' || a=='S'){if(y>13)continue;gotoxy(x*4,(y+1)*2);y=y+1;pd=1;}if(b==-1 && (a=='y' || a=='Y') && pd==1){ weizhi(da,x,y);if(da->ch==1){da->ch=0;continue;}bqizi();o[1]++;n++;pd=0;da->qp[x][y]=1;gotoxy(65,5);printf("執白子行");gotoxy(x*4+2,y*2); judgeL(le,da,x,y,1);judgeV(le,da,x,y,1);judge45(le,da,x,y,1);judge135(le,da,x,y,1);if(da->sum[1]>5 || da->sum[2]>5 || da->sum[3]>5 || da->sum[4]>5){gotoxy(20,5);printf("由禁手規則,白棋獲勝!"); zlyj(le,da);if(da->yon==1)return 0;}if(da->sum[1]==5 || da->sum[2]==5 || da->sum[3]==5 || da->sum[4]==5){gotoxy(25,5);printf("黑棋勝!");zlyj(le,da);if(da->yon==1)return 0;}}if(b==1 && (a=='y' || a=='Y') && pd==1){weizhi(da,x,y);if(da->ch==1){da->ch=0;continue;}wqizi();o[0]++;n++;pd=0;da->qp[x][y]=2;gotoxy(65,5);printf("執黑子行");gotoxy(x*4+2,y*2);judgeL(le,da,x,y,2);judgeV(le,da,x,y,2);judge45(le,da,x,y,2);judge135(le,da,x,y,2);if(da->sum[1]>=10 || da->sum[2]>=10 || da->sum[3]>=10 || da->sum[4]>=10){gotoxy(25,7);printf("白棋勝!");zlyj(le,da);if(da->yon==1)return 0;}}if(pd==2 && (a=='y' || a=='Y')){bqizi();o[2]=1;n++;pd=0;da->qp[x][y]=1;gotoxy(65,5);printf("執白子行");gotoxy(x*4+2,y*2);} if(o[0]+o[1]+o[2]==225){gotoxy(25,7);printf("棋局已滿");zlyj(le,da);if(da->yon==1)return 0;}} } int main() {gotoxy(32,10);printf("歡迎使用雙人對戰五子棋系統!");Sleep(2000);system("cls");fflush(stdout);seqstack le;data da;system("mode con cols=80 lines=40");qipan();dire(&le,&da); }






總結

以上是生活随笔為你收集整理的简易双人五子棋的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。