代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
五子棋
作者:
锦城暮叶 /
/ 发布于
2013/10/24
/
618
一个以输入坐标形式游戏的五子棋程序
/******************************** 这是一个五子棋程序。 ********************************/ #include<stdio.h> #include<stdlib.h> #include<time.h> static int gc[20][20]; double times; clock_t g_t_b,g_t_s; int x,y; int main(){ void game_begin(); void game_output(); void game_input(); void game_computer(); void game_judge(); clock_t w_b,w_s; /* 声明各基本函数。 */ game_begin(); printf("\n"); system("pause"); printf(" Game Begin! \n\n"); game_output(); g_t_b=clock(); printf("!电脑下的棋子为:◎,您下的棋子为:■!\n"); while(1){ game_input(); system("cls"); game_output(); game_judge(); w_b=clock(); printf("等待电脑思考......\n"); do{ w_s=clock(); }while((w_s-w_b)/CLK_TCK<2); game_computer(); system("cls"); game_output(); game_judge(); } /* 游戏程序。 */ return 0; } void game_begin(){ clock_t js_b,js_s; int i; char words[9][3]={{"欢"},{"迎"},{"来"},{"到"},{"五"},{"子"},{"棋"},{"世"},{"界"}}; for(i=0;i<9;i++){ js_b=clock(); printf("%s\t",words[i]); do{ js_s=clock(); }while(((js_s-js_b)/CLK_TCK)<1); } } void game_output(){ int i,j,z=0; for(i=0;i<=20;i++){ for(j=0;j<=20;j++){ if(i==0&&j==0){ printf("┏"); } else if(i==0&&j==19){ printf("┓"); } else if(i==19&&j==0){ printf("┗"); } else if(i==19&&j==19){ printf("┛"); } else if(i==0&&j!=0&&j!=19&&j!=20){ printf("┳"); } else if(j==0&&i!=0&&i!=19&&i!=20){ printf("┣"); } else if(j==19&&i!=0&&i!=19&&i!=20){ printf("┫"); } else if(i==19&&j!=0&&j!=19&&j!=20&&i!=20){ printf("┻"); } else if(gc[i][j]==0&&j!=20&&i!=20){ printf("╂"); } else if(gc[i][j]==1){ printf("◎"); } else if(gc[i][j]==2){ printf("■"); } if(j==20){ printf(" %d",z); z++; } if(i==20&&j!=20&&j<=9){ printf("%d ",j); } if(i==20&&j==10){ printf("0"); } if(i==20&&j>10&&j<20){ printf(" %d",j); } } printf("\n"); } } void game_input(){ printf("请输入您要下的棋子的坐标(最外层边不包括!) eg: 2,3 -"); do{ fflush(stdin); scanf("%d,%d",&y,&x); getchar(); if(x<1||x>19||y<1||y>19){ printf("您的输入不合法!\n"); printf("\a请重新输入! eg: 2,3 \n-"); fflush(stdin); } if(gc[x][y]==1||gc[x][y]==2){ printf("输入错误 该坐标已经有棋子!"); printf("\a请重新输入! eg: 2,3 \n-"); fflush(stdin); } }while(x<1||x>19||y<1||y>19||gc[x][y]==1||gc[x][y]==2); gc[x][y]=2; } void game_computer(){ int i,j,k=0; for(i=1;i<19;i++){ for(j=1;j<19;j++){ if(j<=14&&gc[i][j]==1&&gc[i][j+1]==1&&gc[i][j+2]==1&&gc[i][j+3]==1){ if(gc[i][j-1]==0){ if(k==0){ gc[i][j-1]=1; k=1; } } else if(gc[i][j+4]==0){ if(k==0){ gc[i][j+4]=1; k=1; } } } else if(i<=14&&gc[i][j]==1&&gc[i+1][j]==1&&gc[i+2][j]==1&&gc[i+3][j]==1){ if(gc[i+4][j]==0){ if(k==0){ gc[i+4][j]=1; k=1; } } else if(i>=1&&gc[i-1][j]==0){ if(k==0){ gc[i-1][j]=1; k=1; } } } else if(j<=14&&i<=14&&gc[i][j]==1&&gc[i+1][j+1]==1&&gc[i+2][j+2]==1&&gc[i+3][j+3]==1){ if(gc[i+4][j+4]==0){ if(k==0){ gc[i+4][j+4]=1; k=1; } } else if(i>=1&&j>=1&&gc[i-1][j-1]==0){ if(k==0){ gc[i-1][j-1]=1; k=1; } } } else if(j<=14&&i<=14&&gc[i][j]==1&&gc[i+1][j-1]==1&&gc[i+2][j-2]==1&&gc[i+3][j-3]==1){ if(j-4>=1&&i+4>=1&&gc[i+4][j-4]==0){ if(k==0){ gc[i+4][j-4]=1; k=1; } } else if(i>=1&&j<19&&gc[i-1][j+1]==0){ if(k==0){ gc[i-1][j+1]=1; k=1; } } } } } /* 电脑计算:当电脑下的棋子已经有4连的时候补满5个。 */ for(i=0;i<20;i++){ for(j=0;j<20;j++){ if(j<=14&&gc[i][j]==2&&gc[i][j+1]==2&&gc[i][j+2]==2){ if( j>1 && (gc[i][j-1]==0)&&gc[i][j+3]!=1 ){ if(k==0){ gc[i][j-1]=1; k=1; } } else if( j<18 &&gc[i][j+1]==0 &&gc[i][j-1]!=1){ if(k==0){ gc[i][j+3]=1; k=1; } } } else if(i<=14&&gc[i][j]==2&&gc[i+1][j]==2&&gc[i+2][j]==2){ if(i>1&&(gc[i-1][j]==0)&&gc[i+1][j]!=1 ){ if(k==0){ gc[i-1][j]=1; k=1; } } else if(i<18&&(gc[i+3][j]==0)&&gc[i-1][j]!=1){ if(k==0){ gc[i+3][j]=1; k=1; } } } else if(j<=14&&i<=14&&gc[i][j]==2&&gc[i+1][j+1]==2&&gc[i+2][j+2]==2){ if(i<18&&j<18&&(gc[i+3][j+3]==0)&&gc[i-1][j-1]!=1){ if(k==0){ gc[i+3][j+3]=1; k=1; } } else if(i>1&&j>1&&(gc[i-1][j-1]==0)&&gc[i+3][j+3]!=1){ if(k==0){ gc[i-1][j-1]=1; k=1; } } } else if(j<=14&&i<=14&&gc[i][j]==2&&gc[i+1][j-1]==2&&gc[i+2][j-2]==2){ if(i>1&&j>1&&(gc[i-1][j+1]==0)&&gc[i-3][j-3]!=1){ if(k==0){ gc[i-1][j+1]=1; k=1; } } else if(i>1&&j<18&&(gc[i+3][j-3]==0)&&gc[i-1][j+1]!=1){ if(k==0){ gc[i+3][j-3]=1; k=1; } } } } } /* 计算当玩家有3颗连续的棋子时,堵住它。 */ for(i=0;i<19;i++){ for(j=0;j<19;j++){ if(gc[i][j]==2&&gc[i][j+1]==2&&gc[i][j+3]==2){ if(gc[i][j+2]==0){ if(k==0){ gc[i][j+2]==1; k=1; } } } else if(gc[i][j]==2&&gc[i+1][j]==2&&gc[i+3][j]==2){ if(gc[i+2][j]==0){ if(k==0){ gc[i+2][j]=1; k=1; } } } else if(gc[i][j]==2&&gc[i+1][j+1]==2&&gc[i+3][j+3]==2){ if(gc[i+2][j+2]==0){ if(k==0){ gc[i+3][j+2]=1; k=1; } } } else if(gc[i][j]==2&&gc[i+1][j-1]==2&&gc[i+3][j-3]==2){ if(gc[i+2][j-2]==0){ if(k==0){ gc[i+2][j-2]=1; k=1; } } } } } /* 堵住玩家2 1 的攻略。 */ for(i=0;i<19;i++){ for(j=0;j<19;j++){ if(gc[i][j]==2&&gc[i][j+2]==2&&gc[i][j+3]==2){ if(gc[i][j+1]==0){ if(k==0){ gc[i][j+1]=1; k=1; } } } else if(gc[i][j]==2&&gc[i+2][j]==2&&gc[i+3][j]==2){ if(gc[i+1][j]==0){ if(k==0){ gc[i+1][j]=1; k=1; } } } else if(gc[i][j]==2&&gc[i+2][j+2]==2&&gc[i+3][j+3]==2){ if(gc[i+1][j+1]==0){ if(k==0){ gc[i+1][j+1]=1; k=1; } } } else if(gc[i][j]==2&&gc[i+2][j-2]==2&&gc[i+3][j-3]==2){ if(gc[i+1][j-1]==0){ if(k==0){ gc[i+1][j-1]=1; k=1; } } } } } /* 堵住玩家1 2 的攻略。 */ for(i=1;i<19;i++){ for(j=1;j<19;j++){ if(gc[i][j]==2&&gc[i+1][j-1]==2&&gc[i+1][j+1]==2&&gc[i+2][j]==2&&gc[i+1][j]==0){ if(k==0){ gc[i+1][j]=1; k=1; } } if(gc[i][j]==1&&gc[i+1][j-1]==1&&gc[i+1][j+1]==1&&gc[i+2][j]==1&&gc[i+1][j]==0){ if(k==0){ gc[i+1][j]=1; k=1; } } } } /* 计算十字架型下棋方式。 */ for(i=1;i<19;i++){ for(j=1;j<19;j++){ if(j<=14&&gc[i][j]==1&&gc[i][j+1]==1&&gc[i][j+2]==1){ if(gc[i][j-1]==0){ if(k==0){ gc[i][j-1]=1; k=1; } } else if(gc[i][j+3]==0){ if(k==0){ gc[i][j+3]=1; k=1; } } } else if(i<=14&&gc[i][j]==1&&gc[i+1][j]==1&&gc[i+2][j]==1){ if(gc[i+3][j]==0){ if(k==0){ gc[i+3][j]=1; k=1; } } else if(i>=1&&gc[i-1][j]==0){ if(k==0){ gc[i-1][j]=1; k=1; } } } else if(j<=14&&i<=14&&gc[i][j]==1&&gc[i+1][j+1]==1&&gc[i+2][j+2]==1){ if(gc[i+3][j+3]==0){ if(k==0){ gc[i+3][j+3]=1; k=1; } } else if(i>=1&&j>=1&&gc[i-1][j-1]==0){ if(k==0){ gc[i-1][j-1]=1; k=1; } } } else if(j<=14&&i<=14&&gc[i][j]==1&&gc[i+1][j-1]==1&&gc[i+2][j-2]==1){ if(j-3>=1&&i+3>=1&&gc[i+3][j-3]==0){ if(k==0){ gc[i+3][j-3]=1; k=1; } } else if(i>=1&&j<19&&gc[i-1][j+1]==0){ if(k==0){ gc[i-1][j+1]=1; k=1; } } } } } /* 电脑下棋有3连棋子时四连。 */ for(i=1;i<19;i++){ for(j=1;j<19;j++){ if(j<=14&&gc[i][j]==1&&gc[i][j+1]==1){ if(gc[i][j-1]==0){ if(k==0){ gc[i][j-1]=1; k=1; } } else if(gc[i][j+2]==0){ if(k==0){ gc[i][j+2]=1; k=1; } } } else if(i<=14&&gc[i][j]==1&&gc[i+1][j]==1){ if(gc[i+2][j]==0){ if(k==0){ gc[i+2][j]=1; k=1; } } else if(i>=1&&gc[i-1][j]==0){ if(k==0){ gc[i-1][j]=1; k=1; } } } else if(j<=14&&i<=14&&gc[i][j]==1&&gc[i+1][j+1]==1){ if(gc[i+2][j+2]==0){ if(k==0){ gc[i+2][j+2]=1; k=1; } } else if(i>=1&&j>=1&&gc[i-1][j-1]==0){ if(k==0){ gc[i-1][j-1]=1; k=1; } } } else if(j<=14&&i<=14&&gc[i][j]==1&&gc[i+1][j-1]==1){ if(j-2>=1&&i+2>=1&&gc[i+2][j-2]==0){ if(k==0){ gc[i+2][j-2]=1; k=1; } } else if(i>=1&&j<19&&gc[i-1][j+1]==0){ if(k==0){ gc[i-1][j+1]=1; k=1; } } } } } /* 电脑2连的时候3连。 */ for(i=1;i<19;i++){ for(j=1;j<19;j++){ if(j<=14&&gc[i][j]==1){ if(gc[i][j-1]==0){ if(k==0){ gc[i][j-1]=1; k=1; } } else if(gc[i][j+1]==0){ if(k==0){ gc[i][j+1]=1; k=1; } } } else if(i<=14&&gc[i][j]==1){ if(gc[i+1][j]==0){ if(k==0){ gc[i+1][j]=1; k=1; } } else if(i>=1&&gc[i-1][j]==0){ if(k==0){ gc[i-1][j]=1; k=1; } } } else if(j<=14&&i<=14&&gc[i][j]==1){ if(gc[i+1][j+1]==0){ if(k==0){ gc[i+2][j+2]=1; k=1; } } else if(i>=1&&j>=1&&gc[i-1][j-1]==0){ if(k==0){ gc[i-1][j-1]=1; k=1; } } } else if(j<=14&&i<=14&&gc[i][j]==1){ if(j-1>=1&&i+1>=1&&gc[i+1][j-1]==0){ if(k==0){ gc[i+1][j-1]=1; k=1; } } else if(i>=1&&j<19&&gc[i-1][j+1]==0){ if(k==0){ gc[i-1][j+1]=1; k=1; } } } } } /* 电脑2颗棋子连接。 */ for(i=1;i<19;i++){ for(j=1;j<19;j++){ if(gc[i][j]==2){ if(j>1&&gc[i][j-1]==0){ if(k==0){ gc[i][j-1]=1; k=1; } } else if(j<18&&gc[i][j+1]==0){ if(k==0){ gc[i][j+1]=1; k=1; } } } } } } void game_judge(){ int i,j,p=0; for(i=1;i<19;i++){ for(j=1;j<19;j++){ if(j<=14&&gc[i][j]==1&&gc[i][j+1]==1&&gc[i][j+2]==1&&gc[i][j+3]==1&&gc[i][j+4]==1){ game_output(); printf("\n\n\n\t\t!电脑\t\t胜利!\t\t\n\n\n\t\t胜败乃兵家常事,请大侠重新来过!\t\t\n"); system("pause"); exit(0); } else if(i<=14&&gc[i][j]==1&&gc[i+1][j]==1&&gc[i+2][j]==1&&gc[i+3][j]==1&&gc[i+4][j]==1){ game_output(); printf("\n\n\n\t\t!电脑\t\t胜利!\t\t\n\n\n\t\t胜败乃兵家常事,请大侠重新来过!\t\t\n"); system("pause"); exit(0); } else if(j<=14&&i<=14&&gc[i][j]==1&&gc[i+1][j+1]==1&&gc[i+2][j+2]==1&&gc[i+3][j+3]==1&&gc[i+4][j+4]==1){ game_output(); printf("\n\n\n\t\t!电脑\t\t胜利!\t\t\n\n\n\t\t胜败乃兵家常事,请大侠重新来过!\t\t\n"); system("pause"); exit(0); } else if(j<=14&&i<=144&&gc[i][j]==1&&gc[i+1][j-1]==1&&gc[i+2][j-2]==1&&gc[i+3][j-3]==1&&gc[i+4][j-4]==1){ game_output(); printf("\n\n\n\t\t!电脑\t\t胜利!\t\t\n\n\n\t\t胜败乃兵家常事,请大侠重新来过!\t\t\n"); system("pause"); exit(0); } if(j<=14&&gc[i][j]==2&&gc[i][j+1]==2&&gc[i][j+2]==2&&gc[i][j+3]==2&&gc[i][j+4]==2){ game_output(); g_t_s=clock(); times=(g_t_s-g_t_b)/CLK_TCK; printf("\n\n\n\t\t!您\t\t胜利了!\t\t\n\n\n\t\t您使用了%f秒战胜了电脑!\t\t\n",times); system("pause"); exit(0); } else if(i<=14&&gc[i][j]==2&&gc[i+1][j]==2&&gc[i+2][j]==2&&gc[i+3][j]==2&&gc[i+4][j]==2){ game_output(); g_t_s=clock(); times=(g_t_s-g_t_b)/CLK_TCK; printf("\n\n\n\t\t!您\t\t胜利了!\t\t\n\n\n\t\t您使用了%f秒战胜了电脑!\t\t\n",times); system("pause"); exit(0); } else if(j<=14&&i<=14&&gc[i][j]==2&&gc[i+1][j+1]==2&&gc[i+2][j+2]==2&&gc[i+3][j+3]==2&&gc[i+4][j+4]==2){ game_output(); g_t_s=clock(); times=(g_t_s-g_t_b)/CLK_TCK; printf("\n\n\n\t\t!您\t\t胜利了!\t\t\n\n\n\t\t您使用了%f秒战胜了电脑!\t\t\n",times); system("pause"); exit(0); } else if(j<=14&&i<=144&&gc[i][j]==2&&gc[i+1][j-1]==2&&gc[i+2][j-2]==2&&gc[i+3][j-3]==2&&gc[i+4][j-4]==2){ game_output(); g_t_s=clock(); times=(g_t_s-g_t_b)/CLK_TCK; printf("\n\n\n\t\t!您\t\t胜利了!\t\t\n\n\n\t\t您使用了%f秒战胜了电脑!\t\t\n",times); system("pause"); exit(0); } else if(gc[i][j]==0){ p++; } } } if(p==19*19) { game_output(); g_t_s=clock(); times=(g_t_s-g_t_b)/CLK_TCK; printf("祝贺您,跟电脑打了个平手!\n用时:%f秒......",times); system("pause"); exit(0); } }
试试其它关键字
五子棋
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
锦城暮叶 /
贡献的其它代码
(
1
)
.
五子棋
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3