本文主要是介绍三子棋(初阶),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
使用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'; }
游戏还是有点不完善,我想把三子棋变成多子棋,后期会花时间继续完善
也希望大佬们帮帮我
我磕上两个 咚—咚—
谢谢啦
这篇关于三子棋(初阶)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!