C语言版井字棋
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
&&a[Funcx(choice)+2][Funcy(choice+1)+4]==a[Funcx(choice)+2][Funcy(choice+2)+4])
)
||
a[Funcx(5)+2][Funcy(5)+4]==symbol
&&
(
(a[Funcx(1)+2][Funcy(1)+4]==a[Funcx(5)+2][Funcy(5)+4]
a[x][y]=' ';
else if(y<Funcy(choice)+7||y>Funcy(choice)+14)
a[x][y]=' ';
}
else if(x<Funcx(choice)+4||x>Funcx(choice)+6)
if(y==Funcy(choice)+2||y==Funcy(choice)+19)
printf("\t 'W'上移, 'S'下移, 'A'左移, 'D'右移\n\n");
printf("\t\t游戏中按'4'退出");
printf("\n\n\n\n\t\t按任意键退出");
}
int Play(char player,int choice){//对弈
char get;
char symbol;
{
if(y==Funcy(choice)+2||y==Funcy(choice)+19)
a[x][y]='+';
else if(y<Funcy(choice)+7||y>Funcy(choice)+14)
a[x][y]='-';
}
else if(x<Funcx(choice)+4||x>Funcx(choice)+6)
void Display();//打印棋盘
void Black(int choice);//黑棋
void White(int choice);//白棋
void Block(int choice);//添加选择框
void Clear(int choice);//清空之前的选择框
int Judge(int choice,char symbol);//判断输赢返回值0为无结果,1为获胜,2为平局
symbol='*';
}
if((c=Judge(choice,symbol))!=0){//判断输赢
if(c==2)
symbol='=';
c=0;
End(symbol);
break;
}
}
return 0;
}
void Init(){//初始化棋盘
int x=0,y=0;
int i='1';
for(x=0;x<31;x++)
int c=0;//Judge得出的结果
while(1){
system("cls");//每次循环清屏一次
Display();
if(player=='1'){//玩家下棋
while(1){//确定要下的位置
if((get=getch())!=' '){
if(get=='4'){
system("cls");
else
a[x][y]='|';
}
else if(x==Funcx(1)||x==Funcx(4)||x==Funcx(7)||x==Funcx(4)+Funcx(7))
a[x][y]='-';
else
a[x][y]=' ';
}
}
//for(x=1;x<=7;x=x+3)//在每个格子的左上角添加序号,范围1~9
截图:
代码:
//@author GXU-pengcheng
#include<stdio.h>
#include<windows.h>
#include<conio.h>
void HeBaidu Nhomakorabeap();//帮助
int Play(char player,int choice);//对弈
void Init();//初始化棋盘
//{
//for(y=1;y<=3;y++)
//{
//a[(Funcx(x)+1)][(Funcy(y)+1)]=i;
//i++;
//}
//}
}
void Display(){//打印棋盘
int x=0,y=0;
for(x=0;x<31;x++)
{
for(y=0;y<64;y++)
{
printf("%c",a[x][y]);
}
void End(char symbol){//结束
system("cls");
Display();
if(symbol=='*')
}
}
}
void Block(int choice){//添加选择框
int x,y;
for(x=Funcx(choice)+1;x<Funcx(choice)+10;x++)
{
for(y=Funcy(choice)+2;y<Funcy(choice)+20;y++)
if(x==Funcx(choice)+1||x==Funcx(choice)+9)
int Funcx(int choice);//将标号转换为行号
int Funcy(int choice);//将标号转换为列号
void End(char symbol);//结束
int Found();//返回第一个没有棋子的位置的编号
char a[31][64];//用数组存放棋盘和棋子,a[行][列]
&&a[Funcx(choice+3)+2][Funcy(choice)+4]==a[Funcx(choice+6)+2][Funcy(choice)+4])
||
(a[Funcx(choice)+2][Funcy(choice)+4]==a[Funcx(choice)+2][Funcy(choice+1)+4]
a[x][y]=' ';
}
}
}
}
void Black(choice){//添加黑棋
int x,y;
for(x=Funcx(choice)+2;x<Funcx(choice)+9;x++)
{
for(y=Funcy(choice)+4;y<Funcy(choice)+18;y++)
if(x==Funcx(choice)+2||x==Funcx(choice)+8)
int b=0;//棋子个数
int main(){
char player;
int choice;
system("title井字棋");//设置标题
system("mode con cols=64 lines=35");//设置窗口大小
system("color 70");//设置颜色
while(1){
return 0;
}else if( (get=='w'||get=='W') &&choice-3>=1){
Clear(choice);
choice =choice-3;
}else if((get=='s'||get=='S')&&choice+3<=9){
Clear(choice);
choice = choice+3;
&&a[Funcx(5)+2][Funcy(5)+4]==a[Funcx(9)+2][Funcy(9)+4])
||
(a[Funcx(3)+2][Funcy(3)+4]==a[Funcx(5)+2][Funcy(5)+4]
&&a[Funcx(5)+2][Funcy(5)+4]==a[Funcx(7)+2][Funcy(7)+4])
{
a[x][Funcy(choice)+d]='*';
a[x][Funcy(choice)+20-d]='*';
d=d+2;
}
}
int Judge(int choice,char symbol){//判断输赢返回值0为无结果,1为获胜,2为平局
if(
(
(a[Funcx(choice)+2][Funcy(choice)+4]==a[Funcx(choice+3)+2][Funcy(choice)+4]
十五、井字棋
【问题描述】
设计一个井字棋的游戏程序
【基本要求】
游戏规则是:从一个空的棋盘开始,人为x一方,计算机为o一方,人机双方轮流放置棋子,人下的时候,字符x将被放入棋盘中指定的位置,轮到计算机下时,程序将扫描棋盘,并将字符o放入扫描到的第一个空格,某一方有3枚棋子占据了一横行、一竖行或一对角线则获胜,若整个棋盘被占满还没有一方获胜则为和局。
choice += 1;
}else{
continue;
}
Block(choice);
system("cls");
Display();
}
else{
if(a[((choice-1)/3)*10+2][((choice-1)%3)*21+4]!=' '){
printf("该位置已有其他棋子!");
continue;
a[x][y]='#';
else if(y==Funcy(choice)+4||y==Funcy(choice)+17)
a[x][y]='#';
}
}
void White(choice){//添加白棋
int x;
int d=4;
for(x=Funcx(choice)+2;x<=Funcx(choice)+8;x++)
)
)
return 1;
if(b==9)
return 2;
return 0;
}
int Funcx(int choice){//将标号转换为行号
return (((choice-1)/3)%3)*10;
}
int Funcy(int choice){//将标号转换为列号
return ((choice-1)%3)*21;
if(y==Funcy(choice)+2||y==Funcy(choice)+19)
a[x][y]='|';
}
}
void Clear(int choice){//清空选择框
int x,y,i;
for(i=1;i<=9;i++){
if(a[Funcx(choice)+1][Funcy(choice)+2]=='+'&&i!=choice){
for(x=Funcx(choice)+1;x<Funcx(choice)+10;x++)
{
for(y=Funcy(choice)+2;y<Funcy(choice)+20;y++)
if(x==Funcx(choice)+1||x==Funcx(choice)+9)
{
if(y==Funcy(choice)+2||y==Funcy(choice)+19)
}else if((get=='a'||get=='A')&&(choice+2)/3==(choice+1)/3){
Clear(choice);
choice -= 1;
}else if((get=='d'||get=='D')&&(choice-1)/3==choice/3){
Clear(choice);
continue;
}else if(player=='4'){
return 0;
}else{
printf("\n\n\t\t输入错误请重新输入!");
Sleep(1000);
system("cls");
continue;
}
}
return 0;
}
void Help(){
system("cls");
printf("\n\n\n\n\n\n\n\n\n\t\t\t帮助\n\n\n");
if(player=='1'){
Init();
Block(5);
choice=5;
Play(player,choice);
}else if(player=='2'){
Init();
Play(player,choice);
}else if(player=='3'){
Help();
getch();
system("cls");
}else{
Clear(choice);
break;
}
}
}//while结束
b++;
Black(choice);
player='0';
symbol='#';
}//if结束
else{//电脑下棋
choice=Found();
Block(choice);
b++;
White(choice);
player='1';
printf("\n\n\n\n\n\n\t\t\t井\t字\t棋");
printf("\n\n\n\n\n\n\n\n\t\t\t1.玩家先手\n\n\t\t\t2.电脑先手\n\n\t\t\t3.帮助\n\n\t\t\t4.退出\n\n\n\n\n\t\t请输入: ");
player=getch();
{
for(y=0;y<64;y++)
{
if((y==Funcy(1)||y==Funcy(2)||y==Funcy(3)||y==Funcy(2)+Funcy(3)))
{
if(x==Funcx(1)||x==Funcx(4)||x==Funcx(7)||x==Funcx(4)+Funcx(7))
a[x][y]='+';
)
||
a[Funcx(5)+2][Funcy(5)+4]==symbol
&&
(
(a[Funcx(1)+2][Funcy(1)+4]==a[Funcx(5)+2][Funcy(5)+4]
a[x][y]=' ';
else if(y<Funcy(choice)+7||y>Funcy(choice)+14)
a[x][y]=' ';
}
else if(x<Funcx(choice)+4||x>Funcx(choice)+6)
if(y==Funcy(choice)+2||y==Funcy(choice)+19)
printf("\t 'W'上移, 'S'下移, 'A'左移, 'D'右移\n\n");
printf("\t\t游戏中按'4'退出");
printf("\n\n\n\n\t\t按任意键退出");
}
int Play(char player,int choice){//对弈
char get;
char symbol;
{
if(y==Funcy(choice)+2||y==Funcy(choice)+19)
a[x][y]='+';
else if(y<Funcy(choice)+7||y>Funcy(choice)+14)
a[x][y]='-';
}
else if(x<Funcx(choice)+4||x>Funcx(choice)+6)
void Display();//打印棋盘
void Black(int choice);//黑棋
void White(int choice);//白棋
void Block(int choice);//添加选择框
void Clear(int choice);//清空之前的选择框
int Judge(int choice,char symbol);//判断输赢返回值0为无结果,1为获胜,2为平局
symbol='*';
}
if((c=Judge(choice,symbol))!=0){//判断输赢
if(c==2)
symbol='=';
c=0;
End(symbol);
break;
}
}
return 0;
}
void Init(){//初始化棋盘
int x=0,y=0;
int i='1';
for(x=0;x<31;x++)
int c=0;//Judge得出的结果
while(1){
system("cls");//每次循环清屏一次
Display();
if(player=='1'){//玩家下棋
while(1){//确定要下的位置
if((get=getch())!=' '){
if(get=='4'){
system("cls");
else
a[x][y]='|';
}
else if(x==Funcx(1)||x==Funcx(4)||x==Funcx(7)||x==Funcx(4)+Funcx(7))
a[x][y]='-';
else
a[x][y]=' ';
}
}
//for(x=1;x<=7;x=x+3)//在每个格子的左上角添加序号,范围1~9
截图:
代码:
//@author GXU-pengcheng
#include<stdio.h>
#include<windows.h>
#include<conio.h>
void HeBaidu Nhomakorabeap();//帮助
int Play(char player,int choice);//对弈
void Init();//初始化棋盘
//{
//for(y=1;y<=3;y++)
//{
//a[(Funcx(x)+1)][(Funcy(y)+1)]=i;
//i++;
//}
//}
}
void Display(){//打印棋盘
int x=0,y=0;
for(x=0;x<31;x++)
{
for(y=0;y<64;y++)
{
printf("%c",a[x][y]);
}
void End(char symbol){//结束
system("cls");
Display();
if(symbol=='*')
}
}
}
void Block(int choice){//添加选择框
int x,y;
for(x=Funcx(choice)+1;x<Funcx(choice)+10;x++)
{
for(y=Funcy(choice)+2;y<Funcy(choice)+20;y++)
if(x==Funcx(choice)+1||x==Funcx(choice)+9)
int Funcx(int choice);//将标号转换为行号
int Funcy(int choice);//将标号转换为列号
void End(char symbol);//结束
int Found();//返回第一个没有棋子的位置的编号
char a[31][64];//用数组存放棋盘和棋子,a[行][列]
&&a[Funcx(choice+3)+2][Funcy(choice)+4]==a[Funcx(choice+6)+2][Funcy(choice)+4])
||
(a[Funcx(choice)+2][Funcy(choice)+4]==a[Funcx(choice)+2][Funcy(choice+1)+4]
a[x][y]=' ';
}
}
}
}
void Black(choice){//添加黑棋
int x,y;
for(x=Funcx(choice)+2;x<Funcx(choice)+9;x++)
{
for(y=Funcy(choice)+4;y<Funcy(choice)+18;y++)
if(x==Funcx(choice)+2||x==Funcx(choice)+8)
int b=0;//棋子个数
int main(){
char player;
int choice;
system("title井字棋");//设置标题
system("mode con cols=64 lines=35");//设置窗口大小
system("color 70");//设置颜色
while(1){
return 0;
}else if( (get=='w'||get=='W') &&choice-3>=1){
Clear(choice);
choice =choice-3;
}else if((get=='s'||get=='S')&&choice+3<=9){
Clear(choice);
choice = choice+3;
&&a[Funcx(5)+2][Funcy(5)+4]==a[Funcx(9)+2][Funcy(9)+4])
||
(a[Funcx(3)+2][Funcy(3)+4]==a[Funcx(5)+2][Funcy(5)+4]
&&a[Funcx(5)+2][Funcy(5)+4]==a[Funcx(7)+2][Funcy(7)+4])
{
a[x][Funcy(choice)+d]='*';
a[x][Funcy(choice)+20-d]='*';
d=d+2;
}
}
int Judge(int choice,char symbol){//判断输赢返回值0为无结果,1为获胜,2为平局
if(
(
(a[Funcx(choice)+2][Funcy(choice)+4]==a[Funcx(choice+3)+2][Funcy(choice)+4]
十五、井字棋
【问题描述】
设计一个井字棋的游戏程序
【基本要求】
游戏规则是:从一个空的棋盘开始,人为x一方,计算机为o一方,人机双方轮流放置棋子,人下的时候,字符x将被放入棋盘中指定的位置,轮到计算机下时,程序将扫描棋盘,并将字符o放入扫描到的第一个空格,某一方有3枚棋子占据了一横行、一竖行或一对角线则获胜,若整个棋盘被占满还没有一方获胜则为和局。
choice += 1;
}else{
continue;
}
Block(choice);
system("cls");
Display();
}
else{
if(a[((choice-1)/3)*10+2][((choice-1)%3)*21+4]!=' '){
printf("该位置已有其他棋子!");
continue;
a[x][y]='#';
else if(y==Funcy(choice)+4||y==Funcy(choice)+17)
a[x][y]='#';
}
}
void White(choice){//添加白棋
int x;
int d=4;
for(x=Funcx(choice)+2;x<=Funcx(choice)+8;x++)
)
)
return 1;
if(b==9)
return 2;
return 0;
}
int Funcx(int choice){//将标号转换为行号
return (((choice-1)/3)%3)*10;
}
int Funcy(int choice){//将标号转换为列号
return ((choice-1)%3)*21;
if(y==Funcy(choice)+2||y==Funcy(choice)+19)
a[x][y]='|';
}
}
void Clear(int choice){//清空选择框
int x,y,i;
for(i=1;i<=9;i++){
if(a[Funcx(choice)+1][Funcy(choice)+2]=='+'&&i!=choice){
for(x=Funcx(choice)+1;x<Funcx(choice)+10;x++)
{
for(y=Funcy(choice)+2;y<Funcy(choice)+20;y++)
if(x==Funcx(choice)+1||x==Funcx(choice)+9)
{
if(y==Funcy(choice)+2||y==Funcy(choice)+19)
}else if((get=='a'||get=='A')&&(choice+2)/3==(choice+1)/3){
Clear(choice);
choice -= 1;
}else if((get=='d'||get=='D')&&(choice-1)/3==choice/3){
Clear(choice);
continue;
}else if(player=='4'){
return 0;
}else{
printf("\n\n\t\t输入错误请重新输入!");
Sleep(1000);
system("cls");
continue;
}
}
return 0;
}
void Help(){
system("cls");
printf("\n\n\n\n\n\n\n\n\n\t\t\t帮助\n\n\n");
if(player=='1'){
Init();
Block(5);
choice=5;
Play(player,choice);
}else if(player=='2'){
Init();
Play(player,choice);
}else if(player=='3'){
Help();
getch();
system("cls");
}else{
Clear(choice);
break;
}
}
}//while结束
b++;
Black(choice);
player='0';
symbol='#';
}//if结束
else{//电脑下棋
choice=Found();
Block(choice);
b++;
White(choice);
player='1';
printf("\n\n\n\n\n\n\t\t\t井\t字\t棋");
printf("\n\n\n\n\n\n\n\n\t\t\t1.玩家先手\n\n\t\t\t2.电脑先手\n\n\t\t\t3.帮助\n\n\t\t\t4.退出\n\n\n\n\n\t\t请输入: ");
player=getch();
{
for(y=0;y<64;y++)
{
if((y==Funcy(1)||y==Funcy(2)||y==Funcy(3)||y==Funcy(2)+Funcy(3)))
{
if(x==Funcx(1)||x==Funcx(4)||x==Funcx(7)||x==Funcx(4)+Funcx(7))
a[x][y]='+';