java三子棋人机游戏_C语言编程入门游戏《三子棋》

经过C语言初级阶段的系统学习,对基本C语言的知识有了一定的了解和认识,能够通过C语言编程解决一些简单的问题。本次完成一个简单的游戏《三子棋》。

游戏简介:常见的3x3棋盘,有两名游戏玩家,在本版本中实现的效果为人机对战,通过逐个的下棋,如有一方形成了三字连珠,则判定了这一方胜利,如果整个棋盘覆盖满,还没有形成三字连珠,则判定为和局。

编码思路:棋盘由一个3x3的数组进行实现,不同玩家对应不同的字符,每在一个位置放置棋子对应为把该位置进行一次赋值

本次编码使用C语言,共五个函数,分别承担相应的功能。

void Menu()//完成了整个游戏及界面的规划

void Game()//游戏的框架,整合了游戏进行的整个思路

void playermove()//玩家进行棋子的放置

char judge()//判定是否有一方胜出或者和棋

void computerMove()//电脑进行放置棋子

在编码中,电脑棋子的放置通过生成一个随机整数来实现,生成之后判定该位置能否放置,如若不能就再次进行生成随机数。

d1e2fa0821f8ad0a1c2aacf5e411d080.png

#include

#pragma warning(disable:4996);

#include"C:\Users\尽欢\source\repos\ConsoleApplication2\game.h"

int main()

{

int select = 0;

while (1) {

Menu();

scanf("%d", &select);

switch (select)

{

case 1:

Game();

break;

case 2:

system("exit");

break;

default:

printf("输入有误!\n");

break;

}

return 0;

}

}

#ifndef __GAME_H__

#define __GAME_H__

#include

#include

#include

#pragma warning(disable:4996)

#define ROW 3

#define COL 3

#define P_COLOR 'X'

#define C_COLOR 'O'

#define NEXT 'N'

#define DRAW 'D'

void Menu();

void Game();

#endif

#include"game.h"

void Menu()

{

printf(" 三子棋 ");

printf("-------------------");

printf("| 1.开始游戏 |");

printf("| 2.退出游戏 |");

printf("-------------------");

printf("请选择");

}

void Game()

{

srand((unsigned long)time(NULL));

char board[ROW][COL];

memset(board, ' ', sizeof(board));

char reselt = 'x';

do {

ShowBoard(board, ROW, COL);

PlayerMove(board, ROW, COL);

result = Judge(board, ROW, COL);

if (result != NEXT) {

break;

}

ComputerMove(board, ROW, COL);

result = Judge(board, ROW, COL);

if (result != NEXT) {

break;

}

} while (1);

if (P_COLOR == result) {

printf("你赢了!\n");

}

else if (C_COLOR == result) {

printf("你输了!\n");

}

else {

printf("和棋!\n");

}

ShowBoard(board, ROW, COL);

}

}

void playermove(char board[][COL], int row, int col)

{

int x = 0;

int y = 0;

int quit = 0;

while (1) {

printf("请输入你的位置:");

scanf("%d %d", x, y);

if (x < 1 || x>3 || y < 1 || y>3)

{

printf("你输入的位置有误!\n");

continue;

}

else if (board[x - 1][y - 1] != ' ')

{

printf("该位置已经被占用\n");

}

else

{

board[x - 1][y - 1] = P_COLOR;

break;

}

}

}

char Judge(char board[][COL], int ROW, int col)

{

for (int i = 0;i < row;i++) {

if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')

return board[i][0];

}

for (int j = 0; j < col; j++) {

if (board[0][j] == board[1][j] && \

board[1][j] == board[2][j] && \

board[0][j] != ' ') {

return board[0][j];

}

}

if (board[0][0] == board[1][1] && \

board[1][1] == board[2][2] && \

board[0][0] != ' ') {

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 (int i = 0; i < row; i++) {

for (int j = 0; j < col; j++) {

if (board[i][j] == ' ') {

return NEXT;

}

}

}

return DRAW;

}

void ComputerMove(char board[][COL], int row, int rol)

{

while (1)

{

int x = rand() % row;

int y = rand() % col;

if (board[x][y] == ' ')

{

board[x][y] = C_COLOR;

break;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值