用C语言实现三子棋游戏

1.头文件部分
#ifndef _THREE_CHESSH
#define _THREE_CHESSH

#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<time.h>
#pragma warning(disable:4996)

#define ROW 3
#define COL 3

void ShowUI();
void Game();
void ComputerMove(char board[ROW][COL], int row, int col);
void PlayerMove(char board[][COL], int row, int col);
void ShowBoard(char board[][COL], int row, int col);
char Judge(char board[][COL], int row, int col);

#endif

2.主函数部分
#include"Three_Chess.h"

int main()
{
int select = 0;
int quit = 0;
while (!quit)
{
ShowUI(); //打印游戏菜单
scanf("%d", &select); //用户进行选择
switch (select)
{
case 1: //进入游戏函数
Game();
break;
case 2: //退出游戏
quit = 1;
printf("ByeBye!\n");
break;
default:
printf("Please Enter Again!\n");
break;
}
}
system("pause");
return 0;
}

3.游戏函数部分
#define _CRT_SECURE_NO_WARNINGS 1
#include"THREE_CHESS.h"
void ShowUI()
{
printf("\n");
printf("
1、GAME 2、EXIT \n");
printf("
\n");
printf("Please Select:\n");
}
void ComputerMove(char board[][COL], int row, int col)
{
while (1)
{
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == ‘ ‘) //判断此位置是否为空,如果为空就赋值‘O‘表示电脑走在此位置
{
board[x][y] = ‘O‘;
break; //退出循环
}
}
}
void PlayerMove(char board[][COL], int row, int col)
{
int x, y;
while (1)
{
printf("Please enter position->x y:\n");
scanf("%d %d", &x, &y); //输入坐标
if (x >= 1 && x <= row && y >= 1 && y <= col)
{ //判断输入的坐标是否满足条件
if (board[x - 1][y - 1] == ‘ ‘) //用户输入的下标是从1开始的,而数组下标是从0开始的,所以这里要对x和y减1
{
board[x - 1][y - 1] = ‘X‘; //用户将X下入棋盘
break;
}
else
{
printf("Your place is taken,Try Again:\n");
}
}
else
{
printf("Enter error,Try Again:\n");
}
}
}
char Judge(char board[][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][2] != ‘ ‘)
{
return board[i][0];
}
}
for (i = 0; i < col; i++)
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[2][i] != ‘ ‘)
{
return board[0][i];
}
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[2][2] != ‘ ‘)
{
return board[0][0];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[2][0] != ‘ ‘)
{
return board[0][2];
}

for (i = 0; i < row; i++)//判断是否棋盘放满了
{
    for (j = 0; j < col; j++)
    {
        if (board[i][j] == ‘ ‘)
        {
            return ‘N‘;           //继续游戏
        }
    }
}
//平局
return ‘E‘;              

}
void ShowBoard(char board[][COL], int row, int col)
{
system("cls"); //清屏
printf(" 1 2 3\n");
printf("---------------\n");
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
printf("%d |", i + 1);
for (j = 0; j < col; j++)
{
printf(" %c |", board[i][j]);
}
printf("\n---------------\n");
}
printf("\n");
}
void Game()
{
char board[ROW][COL]; //定义棋盘(用二维数组实现)
memset(board, ‘ ‘, sizeof(board)); //将棋盘中的元素变成空格
char result = ‘N‘;
srand((unsigned long)time(NULL));
while (1)
{
ComputerMove(board, ROW, COL);
ShowBoard(board, ROW, COL);
result = Judge(board, ROW, COL);
if (result != ‘N‘) //X玩家赢,O电脑赢,E平局,N继续
{
break;
}
PlayerMove(board, ROW, COL);
ShowBoard(board, ROW, COL);
result = Judge(board, ROW, COL);
if (result != ‘N‘) //X玩家赢,O电脑赢,E平局,N继续
{
break;
}
}
switch (result)
{
case ‘X‘:
printf("Congratulations!You Win!\n");
break;
case ‘O‘:
printf("Damn!You Lose!\n");
break;
case ‘E‘:
printf("Dogfall!\n");
break;
default:
break;
}
}

原文地址:https://blog.51cto.com/14239789/2376259

时间: 2024-10-06 03:10:21

用C语言实现三子棋游戏的相关文章

C语言编程 三子棋 游戏

#include<stdio.h> #include<stdlib.h> #include<windows.h> #define amu 3 void menu()//菜单界面 { printf("***********************************************\n"); printf("********** 欢 迎 来 到 三 子 棋 游 戏 *********\n"); printf("

简单的三子棋游戏

简单的三子棋游戏,我能力有限把电脑玩家的走子写的比较简单. #include<stdio.h> void qipan() { printf("_ _|_ _|_ _\n"); printf("_ _|_ _|_ _\n"); printf("_ _|_ _|_ _\n"); } void player_and_pcdo() { int i = 0, j = 0; static char a[3][3] = { ' ', ' ', '

一个简单的三子棋游戏(c语言实现)

题目是:在一个3*3大小的矩阵中下棋一方有连续三个子便获胜 代码如下: #include<stdio.h> #include<stdlib.h> #include<time.h>               char arr[3][3] = { 0 };            //直接定义外部变量所有的函数可以直接使用    因为考虑到棋盘大小是固定的 int size = 9;                   //棋盘大小固定  每下一个子都会使可以下子的容量-1

三子棋游戏

#include<stdio.h> #include<stdlib.h> #include<time.h> void chess_board(char arr[3][3])          //打印棋盘 {    int i = 0;    int j = 0;    for (i = 0; i < 3; i++)    {        printf( " %c | %c | %c \n", arr [i][0], arr[i][1], a

c语言编程三子棋(井字棋)

头文件(test.h): #ifndef _THREE_CHESS_H_//防止头文件被重复,包含[也可以用#pragma once] #define _THREE_CHESS_H_ #include <stdio.h> #include <windows.h> #include <time.h> #pragma warning(disable:4996)//VS中解决scanf函数不能使用问题 #define ROW 3 #define COL 3//宏定义 void

c语言&quot;黑框框&quot;下不忍直视的三子棋实现

今天发一个界面丑到爆,无比Low的三子棋程序 同样,win32 无图形界面 输入坐标进行交互, X代表玩家下子,0代表电脑下子(rand()函数随机产生合法坐标落子),率先连成三子则胜利.棋盘满未连成三子则平局. 程序比较简单直接发源码.三个块,game.h代表程序所需头文件.宏定义.函数声明,test.c代表程序游戏逻辑,game.c代表程序定义函数实现. 代码未优化,尽请见谅. game.h: /* 此头文件包含test.c所需头文件及相关函数声明 */ #ifndef __GAME_H__

企业内训实录:三子棋版阿尔法狗项目及视频面试应用开发

课程下载:https://pan.baidu.com/s/1pPIgDBYiqirDGibxrUWuag 提取码: g9xd 本课程设计三大部分的企业应用:一.数据SQL***的企业防御解决方案(SQLiGoT深入讲解):二.仿AlphaGO的三子棋游戏核心开发技术与模拟实现:三.人工智能视频面试技术 :三个小项目分别属于企业热门经典应用,涉及的技术包括但不限于:SQL.数据库.数据库安全,SVM算法原理.实现及企业真实场景应用.人机对战.前端REACT实现.人工智能相关库的调用.人脸识别算法原

C语言 三子棋 小游戏

//C语言 三子棋 小游戏 //棋盘为3x3大小,电脑棋子 X ,玩家 O : //用命令窗口模拟3子棋,玩家与电脑轮流下,先连成3子判赢:无路可走判平局 #include<stdio.h> #include<string.h> #include<windows.h> int judge_is_moved(char arr[][12], int place); void print_chessboard(char arr[][12])//输出棋盘 { int i = 0

写一个三子棋小游戏的感悟

在写之前,我已经把函数的结构设计出来,主要由以下几个函数实现: 1:初始化棋框 2:玩家下棋 3:电脑下棋 4:判断胜负 5:更新棋框 6:主函数 在写的过程中碰到了不能将玩家下的位置放入棋框中,原因是在函数定义过程中没有将二维数组引入, 导致棋框更新不正确,在函数中引用二维数组时,因为c语言编译系统不检查第一维的大小,只要第二维大小相同,形参数组第一维可以与实参不同,因此在函数定义时只需要写int qk(arr[][i]),i为常数,在主函数调用时只需要写qk(arr)即可,因为数组名本身就是