三子棋(初阶)
使用VSC++2010
较为简单,适合新手攻略(纯纯的C语言)
这是主文件
#define CRT SECURE NO WARNINGS
#include"game.h"
#include<stdio.h>void manu()
{
printf("************************************\n");
printf("************************************\n");
printf("******* 1 . play 0 .exit ********\n");
printf("************************************\n");
printf("************************************\n");
}void game()
{
char ret = 0;
char board[ROW][COL]={0};
InitBoard(board, ROW, COL);//初始化棋盘的函数
DisplayBoard(board, ROW, COL);//打印棋盘的函数
//开始下棋的函数
while(1)
{
PlayerMove(board, ROW, COL);//玩家下棋
DisplayBoard(board, ROW, COL);//显示棋盘
ret = IsWin(board, ROW, COL);//判断输赢
if(ret != 'C')
{
break;
}
ComputerMove(board, ROW, COL);//电脑下棋
DisplayBoard(board, ROW, COL);//显示棋盘
ret = IsWin(board, ROW, COL);//判断输赢
if(ret != 'C')
{
break;
}
}
if(ret == '*')
{
printf("玩家赢了\n");
}
else if(ret == '#')
{
printf("电脑赢了\n");
}
else
{
printf("平局\n");
}
/*DisplayBoard(board, ROW, COL);*/
}int main()
{
int input = 0;
srand((unsigned int)time(NULL));//设置随机数的生成起点
do
{
manu();//打印菜单
printf("请选择:>");
scanf("%d",&input);
switch(input)
{
case 1:
game();//printf("三子棋\n");三子棋的游戏
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}}while(input);
return 0;
}#define CRT SECURE NO WARNINGS #include"game.h" #include<stdio.h> void manu() { printf("************************************\n"); printf("************************************\n"); printf("******* 1 . play 0 .exit ********\n"); printf("************************************\n"); printf("************************************\n"); } void game() { char ret = 0; char board[ROW][COL]={0}; InitBoard(board, ROW, COL);//初始化棋盘的函数 DisplayBoard(board, ROW, COL);//打印棋盘的函数 //开始下棋的函数 while(1) { PlayerMove(board, ROW, COL);//玩家下棋 DisplayBoard(board, ROW, COL);//显示棋盘 ret = IsWin(board, ROW, COL);//判断输赢 if(ret != 'C') { break; } ComputerMove(board, ROW, COL);//电脑下棋 DisplayBoard(board, ROW, COL);//显示棋盘 ret = IsWin(board, ROW, COL);//判断输赢 if(ret != 'C') { break; } } if(ret == '*') { printf("玩家赢了\n"); } else if(ret == '#') { printf("电脑赢了\n"); } else { printf("平局\n"); } /*DisplayBoard(board, ROW, COL);*/ } int main() { int input = 0; srand((unsigned int)time(NULL));//设置随机数的生成起点 do { manu();//打印菜单 printf("请选择:>"); scanf("%d",&input); switch(input) { case 1: game();//printf("三子棋\n");三子棋的游戏 break; case 0: printf("退出游戏\n"); break; default: printf("选择错误,请重新选择\n"); break; } }while(input); return 0; }
这是头文件
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define ROW 3
#define COL 3//初始化棋盘
void InitBoard(char board[ROW][COL],int row,int col);//void InitBoard(char board[3][3],int row,int col);//打印棋盘
void DisplayBoard(char board[ROW][COL],int row,int col);//玩家下棋
void PlayerMove(char board[ROW][COL],int row,int col);//电脑下棋
//找没有下的地方随机下
void ComputerMove(char board[ROW][COL],int row,int col);//
//玩家赢---*
//电脑赢---#
//平局---Q
//继续---C
//
char IsWin(char board[ROW][COL],int row,int col);
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3
//初始化棋盘
void InitBoard(char board[ROW][COL],int row,int col);//void InitBoard(char board[3][3],int row,int col);
//打印棋盘
void DisplayBoard(char board[ROW][COL],int row,int col);
//玩家下棋
void PlayerMove(char board[ROW][COL],int row,int col);
//电脑下棋
//找没有下的地方随机下
void ComputerMove(char board[ROW][COL],int row,int col);
//
//玩家赢---*
//电脑赢---#
//平局---Q
//继续---C
//
char IsWin(char board[ROW][COL],int row,int col);
这是主调游戏源代码
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
#include<stdio.h>void InitBoard(char board[ROW][COL],int row,int col)
{
int i = 0;
int j = 0;
for(i = 0;i<row;i++)
{
for(j = 0;j<col;j++)
{
board[i][j] = ' ';
}
}
}//第一个版本
//void DisplayBoard(char board[ROW][COL],int row,int col)
//{
// int i = 0;
// for(i=0;i<row;i++)
// {
// //打印数据
// printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);
// //打印分割行
// if(i<row-1)
// printf("---|---|---\n");
// }
//}//第二个版本
void DisplayBoard(char board[ROW][COL],int row,int col)
{
int i = 0;
for(i=0;i<row;i++)
{
//打印数据
//printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);
int j = 0;
for(j=0;j<col;j++)
{
printf(" %c ",board[i][j]);
if(j<col-1)
{
printf("|");
}
}
printf("\n");
//打印分割行
/*printf("---|---|---\n");*/
if(i<row-1)
{
int j = 0;
for(j=0;j<col;j++)
{
printf("---");
if(j<col-1)
{
printf("|");
}
}
printf("\n");
}
}
}
void PlayerMove(char board[ROW][COL],int row,int col)
{
int x = 0;
int y = 0;
printf("玩家下棋:>\n");
while(1)
{
printf("请输入坐标\n");
scanf("%d%d",&x,&y);
//坐标合法性的判断
if( x>=1 && x<=row && y>=1 && y<=col)
{
if(board[x-1][y-1]==' ')
{
board[x-1][y-1]='*';
break;
}
else
{
printf("已占用,请重新选择");
}
}
else
{
printf("坐标非法,请重新输入\n");
}
}
}void ComputerMove(char board[ROW][COL],int row,int col)
{
int x = 0;
int y = 0;//C语言中,printf语句后再定义会报错的原因是因为C语言是一种静态类型语言,它要求在使用变量之前必须先进行声明!!!
printf("电脑下棋:>\n");
while(1)
{
int x = rand()%row;//0~row-1 随机数
int y = rand()%col;//0~col-1随机数
if(board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}//满了返回1
//不满返回0
int IsFull(char board[ROW][COL],int row,int col)
{
int i = 0;
int j = 0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
if(board[i][j]==' ')
return 0;
}
}return 1;
}
char IsWin(char board[ROW][COL],int row,int col)
{
//行
int i = 0;
int j = 0;
for(i = 0 ;i < row ; i++)
{
if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' ')
{
return board[i][1];
}
}/*for(i = 0;i < row;i++)
{
for(j = 0;j < col;j++)
{
if(board[i][j] == board[i][j+1]&&board[i][j] != ' ')
{
return board[i][j];
}
}
}*/
//列
for(j = 0;j < col ; j++)
{
if(board[0][j]==board[1][j]&&board[1][j]==board[2][j]&&board[1][j]!=' ')
{
return board[1][j];
}
}//for(j = 0;j < col;j++)
//{
// for(i = 0;i < row;i++)
// {
// if(board[i][j] == board[i+1][j]&&board[i][j] != ' ')
// {
// return board[i][j];
// }
// }
//}//对角线
if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ')
{
return board[1][1];
}
if(board[0][2]==board[1][1]&&board[1][1]==board[2][0]&&board[1][1]!=' ')
{
return board[1][1];
}/*for(j = 0;j < col;j++)
{
for(i = 0;i < row;i++)
{
if(i == j&&board[i][j] == board[i+1][j+1]&&board[i][j] != ' ')
{
return board[i][j];
}
}
}*/
//没有人赢,要平局
if(IsFull(board, ROW, COL))
{
return 'Q';
}
//游戏继续
return 'C';
}#define _CRT_SECURE_NO_WARNINGS #include"game.h" #include<stdio.h> void InitBoard(char board[ROW][COL],int row,int col) { int i = 0; int j = 0; for(i = 0;i<row;i++) { for(j = 0;j<col;j++) { board[i][j] = ' '; } } } //第一个版本 //void DisplayBoard(char board[ROW][COL],int row,int col) //{ //int i = 0; //for(i=0;i<row;i++) //{ ////打印数据 //printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]); ////打印分割行 //if(i<row-1) //printf("---|---|---\n"); //} //} //第二个版本 void DisplayBoard(char board[ROW][COL],int row,int col) { int i = 0; for(i=0;i<row;i++) { //打印数据 //printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]); int j = 0; for(j=0;j<col;j++) { printf(" %c ",board[i][j]); if(j<col-1) { printf("|"); } } printf("\n"); //打印分割行 /*printf("---|---|---\n");*/ if(i<row-1) { int j = 0; for(j=0;j<col;j++) { printf("---"); if(j<col-1) { printf("|"); } } printf("\n"); } } } void PlayerMove(char board[ROW][COL],int row,int col) { int x = 0; int y = 0; printf("玩家下棋:>\n"); while(1) { printf("请输入坐标\n"); scanf("%d%d",&x,&y); //坐标合法性的判断 if( x>=1 && x<=row && y>=1 && y<=col) { if(board[x-1][y-1]==' ') { board[x-1][y-1]='*'; break; } else { printf("已占用,请重新选择"); } } else { printf("坐标非法,请重新输入\n"); } } } void ComputerMove(char board[ROW][COL],int row,int col) { int x = 0; int y = 0;//C语言中,printf语句后再定义会报错的原因是因为C语言是一种静态类型语言,它要求在使用变量之前必须先进行声明!!! printf("电脑下棋:>\n"); while(1) { int x = rand()%row;//0~row-1 随机数 int y = rand()%col;//0~col-1随机数 if(board[x][y] == ' ') { board[x][y] = '#'; break; } } } //满了返回1 //不满返回0 int IsFull(char board[ROW][COL],int row,int col) { int i = 0; int j = 0; for(i=0;i<row;i++) { for(j=0;j<col;j++) { if(board[i][j]==' ') return 0; } } return 1; } char IsWin(char board[ROW][COL],int row,int col) { //行 int i = 0; int j = 0; for(i = 0 ;i < row ; i++) { if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' ') { return board[i][1]; } } /*for(i = 0;i < row;i++) { for(j = 0;j < col;j++) { if(board[i][j] == board[i][j+1]&&board[i][j] != ' ') { return board[i][j]; } } }*/ //列 for(j = 0;j < col ; j++) { if(board[0][j]==board[1][j]&&board[1][j]==board[2][j]&&board[1][j]!=' ') { return board[1][j]; } } //for(j = 0;j < col;j++) //{ //for(i = 0;i < row;i++) //{ //if(board[i][j] == board[i+1][j]&&board[i][j] != ' ') //{ //return board[i][j]; //} //} //} //对角线 if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ') { return board[1][1]; } if(board[0][2]==board[1][1]&&board[1][1]==board[2][0]&&board[1][1]!=' ') { return board[1][1]; } /*for(j = 0;j < col;j++) { for(i = 0;i < row;i++) { if(i == j&&board[i][j] == board[i+1][j+1]&&board[i][j] != ' ') { return board[i][j]; } } }*/ //没有人赢,要平局 if(IsFull(board, ROW, COL)) { return 'Q'; } //游戏继续 return 'C'; }
游戏还是有点不完善,我想把三子棋变成多子棋,后期会花时间继续完善
也希望大佬们帮帮我
我磕上两个 咚—咚—
谢谢啦
原文地址:https://blog.csdn.net/2301_78235522/article/details/135700419
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!