三子棋----C语言实现
Posted KaKaKawhi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三子棋----C语言实现相关的知识,希望对你有一定的参考价值。
前言
个人写的三子棋C语言实现,望交流
一、main函数所在源文件:test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
// 三子棋
void Game(void)
// 用头文件的宏定义来确定棋盘大小
char board[ROW][LINE] = 0;
// 初始化棋盘,放在循环外
Init(board);
// 游戏过程放在死循环,用break跳出
while (1)
// 打印棋盘
//Print(board);
//玩家下棋
printf("玩家下棋:\\n");
Player(board);
// 打印棋盘
Print(board);
// 判定棋局
char ret = Judge(board);
if ('*' == ret)
printf("游戏结束,玩家胜利!\\n");
break;
else if ('#' == ret)
printf("游戏结束,电脑胜利!\\n");
break;
else if('=' == ret)
printf("游戏结束,平局!\\n");
break;
else
printf("游戏继续!\\n");
printf("\\n------------------------\\n");
// 电脑下棋
printf("电脑下棋:\\n");
Robot(board);
// 打印棋盘
Print(board);
// 判定棋局
ret = Judge(board);
if ('*' == ret)
printf("游戏结束,玩家胜利!\\n");
break;
else if ('#' == ret)
printf("游戏结束,电脑胜利!\\n");
break;
else if ('=' == ret)
printf("游戏结束,平局!\\n");
break;
else
printf("游戏继续!\\n");
printf("\\n------------------------\\n");
int main()
srand(time(NULL));
// 首先根据用户需要来决定是否要玩游戏或结束,且将用户的输入作为循环条件,0表示结束可以直接退出循环
int input = 0;
do
printf("请问您是否继续开始游戏(0结束/1开始)\\n");
scanf("%d", &input);
// switch分支来根据用户输入判别
switch (input)
case 1:
Game();
break;
case 0:
printf("已退出\\n");
break;
default:
printf("输入错误,请重新输入\\n");
break;
while (input);
return 0;
二、游戏相关函数定义源文件:game.c
#define _CRT_SECURE_NO_WARNINGS 1
// game源文件实现函数定义
#include "game.h"
void Init(char board[ROW][LINE])
int i = 0;
int j = 0;
for (i = 0; i < ROW; i++)
for (j = 0; j < LINE; j++)
board[i][j] = ' ';
void Print(char board[ROW][LINE])
int i = 0;
int j = 0;
for (i = 0; i < ROW; i++)
for (j = 0; j < LINE; j++)
if (LINE - 1 == j)
printf("| %c |", board[i][j]);
else
printf("| %c ", board[i][j]);
printf("\\n");
for (j = 0; j < LINE; j++)
printf("——");
printf("\\n");
void Player(char board[ROW][LINE])
// 不断下棋,直到找到一个合法位置,或者已经判定到棋盘满
while (1)
// 玩家输入想下棋的位置(玩家棋子:*)
int x = 0;
int y = 0;
// 玩家选择坐标直接根据从0开始数
printf("请选择您要下的位置(x y)\\n");
//以%d,%d输入时,小心逗号格式必须也为英文的,对应起来
scanf("%d %d", &x, &y);
// 判断该位置是否合法
if (x > 0 && y > 0 && x <= ROW && y <= LINE && ' ' == board[x - 1][y - 1])
board[x - 1][y - 1] = '*';
break;
else if ('=' == Judge(board))
// 已满,退出即可,游戏函数紧接着后面就有判定
break;
else
printf("该位置不合法,请重新输入\\n");
void Robot(char board[ROW][LINE])
// 不断下棋,直到找到一个合法位置,或者已经判定到棋盘满
while (1)
// 电脑确定下棋的位置(电脑棋子:#)
// x、y分别为0-ROW 和 0-LINE的数字
int x = rand() % ROW;
int y = rand() % LINE;
// 判断该位置是否合法(与玩家判定下标有点区别)
if (x >= 0 && y >= 0 && x < ROW && y < LINE && ' ' == board[x][y])
board[x][y] = '#';
break;
else if('=' == Judge(board))
// 已满,退出即可,游戏函数紧接着后面就有判定
break;
else
printf("该位置不合法,请重新筛选\\n");
int Is_Full(char board[ROW][LINE])
int i = 0;
int j = 0;
for (i = 0; i < ROW; i++)
for (j = 0; j < LINE; j++)
if (' ' == board[i][j])
// 说明未满,直接返回0
return 0;
// 否则满了返回1
return 1;
// 判定函数看答案了,自己写的有问题!!!!!!!!!!!!!!!!
// 只要在一行中任意3个连续位置都有同一个棋子,则一方胜利
// 玩家胜利返回*
// 电脑胜利返回#
// 平局(棋盘满)返回=
// 继续返回+(直接在函数最外面return '+')
char Judge(char board[ROW][LINE])
// 判定行
int i = 0;
int j = 0;
for (i = 0; i < ROW; i++)
//自己写的:for (j = 0; j < LINE; j++)
for (j = 1; j < LINE - 1; j++)
// 如果一行内判定出来相邻三个棋子相同,则直接返回该棋子对应字符
// 自己写的没有判断不为空
if (board[i][j - 1] == board[i][j] && board[i][j] == board[i][j + 1] && board[i][j] != ' ')
return board[i][j];
// 判定列
for (j = 0; j < LINE; j++)
//自己写的从0开始
for (i = 1; i < ROW - 1; i++)
// 如果一列内判定出来相邻三个棋子相同,则直接返回该棋子对应字符
// 自己写的没有判断不为空
if (board[i - 1][j] == board[i][j] && board[i][j] == board[i + 1][j] && board[i][j] != ' ')
return board[i][j];
// 判定主对角线
for (i = 0; i < ROW; i++)
//自己写的从0开始
for (j = 1; j < LINE - 1; j++)
// 如果主对角线内判定出来相邻三个棋子相同,则直接返回该棋子对应字符
// 自己写的没有判断不为空
if (board[i - 1][j - 1] == board[i][j] && board[i][j] == board[i + 1][j + 1] && board[i][j] != ' ')
return board[i][j];
// 判定次对角线
for (i = 0; i < ROW; i++)
//自己写的从0开始
for (j = 1; j < LINE - 1; j++)
// 如果次对角线内判定出来相邻三个棋子相同,则直接返回该棋子对应字符
// 自己写的没有判断不为空
if (board[i + 1][j - 1] == board[i][j] && board[i][j] == board[i - 1][j + 1] && board[i][j] != ' ')
return board[i][j];
// 当判断是否满的函数返回1时为满,返回0时继续
// 相当if (1 == Is_full(board))
if (Is_Full(board))
return '=';
else
// 判断平局
return '+';
三、头文件、宏定义、游戏函数等声明头文件:game.h
#pragma once
// 头文件实现声明
// //易错:宏定义后面不加分号;
#define ROW 3
#define LINE 3
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
extern void Init(char board[ROW][LINE]);
extern void Print(char board[ROW][LINE]);
extern void Player(char board[ROW][LINE]);
extern void Robot(char board[ROW][LINE]);
extern char Judge(char board[ROW][LINE]);
extern int Is_Full(char board[ROW][LINE]);
总结
这里对文章进行总结:
以上就是今天总结的内容,本文包括了所有个人写的三子棋C语言代码,分享给大家。
真💙欢迎各位给予我更好的建议,欢迎访问!!!小编创作不易,觉得有用可以一键三连哦,感谢大家。peace
希望大家一起坚持学习,共同进步。梦想一旦被付诸行动,就会变得神圣。
欢迎各位大佬批评建议,分享更好的方法!!!🙊🙊🙊
以上是关于三子棋----C语言实现的主要内容,如果未能解决你的问题,请参考以下文章