下面是“ C语言实现简单的三子棋游戏源码”的完整攻略:
一、三子棋游戏规则
三子棋又叫井字棋游戏,是一款传统的二人对弈类游戏。双方玩家交替将自己的棋子放置在 3x3 的棋盘格子上,先连成一条线(直线、横线、斜线)的为胜者。
二、游戏实现思路
1. 程序结构
本游戏程序的基本框架由以下几个部分构成:
/*
* 三子棋游戏
* main函数
* 初始化棋盘
* 显示棋盘
* 玩家下子
* 判断游戏是否结束
* 电脑下子
* 判断游戏是否结束
*/
int main(){
//省略
}
void print_board(){
//省略
}
int player_move(){
//省略
}
int computer_move(){
//省略
}
2. 初始化棋盘
首先,我们需要初始化一个3×3的棋盘,用二维数组表示。每个位置默认为空(设为' ')。
示例代码:
char board[3][3];
void init_board(){
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
board[i][j] = ' ';
}
}
}
3. 显示棋盘
接下来,实现一个函数,将当前的棋盘状态进行打印。
示例代码:
void print_board(){
//显示棋盘行号
printf(" 1 2 3 \n");
//分割线
printf(" -------\n");
for(int i=0;i<3;i++){
//显示列号
printf("%d|", i+1);
for(int j=0;j<3;j++){
printf("%c|",board[i][j]);
}
printf("\n");
//分割线
printf(" -------\n");
}
}
4. 玩家下子
接下来,实现玩家下子的函数。该函数获取玩家输入的坐标,检查输入是否合法并更新棋盘状态。
示例代码:
int player_move(){
int row,col;
while(1){
printf("请输入您要下的坐标(例:1 2):");
//获取坐标
scanf("%d %d",&row,&col);
//判断坐标是否合法
if(row<1 || row>3 || col<1 || col>3){
printf("坐标输入有误,请重新输入!\n");
}
else if(board[row-1][col-1] != ' '){
printf("该位置已有棋子,请重新输入!\n");
}
else{
//更新棋盘
board[row-1][col-1] = 'X';
return check_game_over();
}
}
}
int check_game_over(){
//判断是否有一方胜出
for(int i=0;i<3;i++){
if(board[i][0] != ' ' && board[i][0] == board[i][1] && board[i][1] == board[i][2]){
return 1;
}
if(board[0][i] != ' ' && board[0][i] == board[1][i] && board[1][i] == board[2][i]){
return 1;
}
}
if(board[1][1] != ' ' && ((board[0][0] == board[1][1] && board[1][1] == board[2][2]) || (board[0][2] == board[1][1] && board[1][1] == board[2][0]))){
return 1;
}
//判断是否平局
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(board[i][j] == ' '){
return 0;
}
}
}
return 2;
}
5. 电脑下子
最后,实现电脑下子的函数。该函数随机生成一个坐标,在棋盘上落子。
示例代码:
int computer_move(){
int row,col;
while(1){
row = rand() % 3;
col = rand() % 3;
if(board[row][col] == ' '){
board[row][col] = 'O';
return check_game_over();
}
}
}
三、完整源码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//三子棋棋盘
char board[3][3];
//初始化棋盘
void init_board(){
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
board[i][j] = ' ';
}
}
}
//显示棋盘
void print_board(){
//显示棋盘行号
printf(" 1 2 3 \n");
//分割线
printf(" -------\n");
for(int i=0;i<3;i++){
//显示列号
printf("%d|", i+1);
for(int j=0;j<3;j++){
printf("%c|",board[i][j]);
}
printf("\n");
//分割线
printf(" -------\n");
}
}
//玩家下子
int player_move(){
int row,col;
while(1){
printf("请输入您要下的坐标(例:1 2):");
//获取坐标
scanf("%d %d",&row,&col);
//判断坐标是否合法
if(row<1 || row>3 || col<1 || col>3){
printf("坐标输入有误,请重新输入!\n");
}
else if(board[row-1][col-1] != ' '){
printf("该位置已有棋子,请重新输入!\n");
}
else{
//更新棋盘
board[row-1][col-1] = 'X';
return check_game_over();
}
}
}
//判断游戏是否结束
int check_game_over(){
//判断是否有一方胜出
for(int i=0;i<3;i++){
if(board[i][0] != ' ' && board[i][0] == board[i][1] && board[i][1] == board[i][2]){
return 1;
}
if(board[0][i] != ' ' && board[0][i] == board[1][i] && board[1][i] == board[2][i]){
return 1;
}
}
if(board[1][1] != ' ' && ((board[0][0] == board[1][1] && board[1][1] == board[2][2]) || (board[0][2] == board[1][1] && board[1][1] == board[2][0]))){
return 1;
}
//判断是否平局
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(board[i][j] == ' '){
return 0;
}
}
}
return 2;
}
//电脑下子
int computer_move(){
int row,col;
while(1){
row = rand() % 3;
col = rand() % 3;
if(board[row][col] == ' '){
board[row][col] = 'O';
return check_game_over();
}
}
}
//三子棋游戏主函数
int main(){
int result = 0,player_turn = 1;
//初始化随机数种子
srand(time(NULL));
init_board();
print_board();
while(1){
if(player_turn){
result = player_move();
print_board();
if(result == 1){
printf("您赢了!\n");
break;
}
else if(result == 2){
printf("平局!\n");
break;
}
player_turn = 0;
}
else{
printf("电脑下子:\n");
result = computer_move();
print_board();
if(result == 1){
printf("电脑赢了!\n");
break;
}
else if(result == 2){
printf("平局!\n");
break;
}
player_turn = 1;
}
}
return 0;
}
四、示例说明
示例一
三子棋游戏
1 2 3
-------
1| | | |
-------
2| | | |
-------
3| | | |
-------
请输入您要下的坐标(例:1 2):2 2
1 2 3
-------
1| | | |
-------
2| |X| |
-------
3| | | |
-------
电脑下子:
1 2 3
-------
1| | | |
-------
2|O|X| |
-------
3| | | |
-------
请输入您要下的坐标(例:1 2):3 1
1 2 3
-------
1| | | |
-------
2|O|X| |
-------
3|X| | |
-------
电脑下子:
1 2 3
-------
1| | | |
-------
2|O|X| |
-------
3|X| |O|
-------
请输入您要下的坐标(例:1 2):2 1
1 2 3
-------
1| | | |
-------
2|O|X| |
-------
3|X|X|O|
-------
电脑下子:
1 2 3
-------
1|O| | |
-------
2|O|X| |
-------
3|X|X|O|
-------
电脑赢了!
示例二
三子棋游戏
1 2 3
-------
1| | | |
-------
2| | | |
-------
3| | | |
-------
请输入您要下的坐标(例:1 2):2 2
1 2 3
-------
1| | | |
-------
2| |X| |
-------
3| | | |
-------
电脑下子:
1 2 3
-------
1| | | |
-------
2| |X| |
-------
3|O| | |
-------
请输入您要下的坐标(例:1 2):3 1
1 2 3
-------
1| | | |
-------
2| |X| |
-------
3|O| |X|
-------
电脑下子:
1 2 3
-------
1|O| | |
-------
2| |X| |
-------
3|O| |X|
-------
请输入您要下的坐标(例:1 2):2 3
1 2 3
-------
1|O| | |
-------
2| |X|X|
-------
3|O| |X|
-------
平局!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现简单的三子棋游戏源码 - Python技术站