三子棋小游戏——C语言版

news/2025/1/8 21:48:33/

三子棋—c语言版本

  • 一、问题描述
  • 二、基本思路
  • 三、操作步骤
    • 1.打印菜单
    • 2.初始化棋盘
    • 3.打印棋盘
    • 4.玩家下棋
    • 5.电脑下棋
    • 5.判断胜负
  • 四、全部代码
    • 1.game.h
    • 2.game.c
    • 3.test.c

一、问题描述

本次三子棋小游戏代码全部由C语言实现,运用了C语言的二维数组,循环,函数等基本知识来完成的。

二、基本思路

         1.菜单界面2.初始化棋盘3.打印棋盘4.玩家下棋5.电脑下棋6.判断胜负

三、操作步骤

1.打印菜单

void menu() 
{printf("****************\n");printf("**1.play 0.exit**\n");printf("****************\n");
}

2.初始化棋盘

//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col)
{int i = 0, j = 0;for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {board[i][j] = ' ';}}
}

3.打印棋盘

//打印棋盘
void DisplayBoard(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++) {int j = 0;for (j = 0; j < col; j++) {printf(" %c ", board[i][j]);if (j < col - 1)printf("|");}printf("\n");if (i < row - 1) {int j = 0;for (j = 0; j < col; j++) {printf("---");if (j < col -1)printf("|");}	}printf("\n");}
}

4.玩家下棋

//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col)
{int x = 0, y = 0;printf("玩家下棋->\n");while (1){printf("请输入坐标—>");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("坐标被占用,请重新选择\n");}}printf("坐标非法,请重新输入\n");}
}

5.电脑下棋

//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col)
{printf("电脑下棋->\n");int x = 0, y = 0;while (1){x = rand() % row;//0~2y = rand() % col;//0~2if (board[x][y] == ' ') {board[x][y] = '#';break;}}
}

5.判断胜负

//判断输赢
//满了返回1,不满返回0
int IsFull(char board[ROW][COL], int row, int col)
{int i = 0, 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, 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++){int count = 0;for (j = 0; j < col-1; j++){if (board[i][j] == board[i][j + 1] && board[i][j] != ' ')count++;}if(count == col - 1)return board[i][1];}//判断列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];}}//判断对角线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];}//平局if (IsFull(board, row, col)){return 'Q';}//游戏继续return 'C';
}

四、全部代码

1.game.h

#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 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);
//判断输赢
char IsWin(char board[ROW][COL], int row, int col);
//判断棋盘是否满了
int IsFull(char board[ROW][COL], int row, int col);

2.game.c

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include"game.h"//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col)
{int i = 0, 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++) {int j = 0;for (j = 0; j < col; j++) {printf(" %c ", board[i][j]);if (j < col - 1)printf("|");}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, y = 0;printf("玩家下棋->\n");while (1){printf("请输入坐标—>");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("坐标被占用,请重新选择\n");}}printf("坐标非法,请重新输入\n");}
}
//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col)
{printf("电脑下棋->\n");int x = 0, y = 0;while (1){x = rand() % row;//0~2y = rand() % col;//0~2if (board[x][y] == ' ') {board[x][y] = '#';break;}}
}
//判断输赢
//满了返回1,不满返回0
int IsFull(char board[ROW][COL], int row, int col)
{int i = 0, 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, 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++){int count = 0;for (j = 0; j < col-1; j++){if (board[i][j] == board[i][j + 1] && board[i][j] != ' ')count++;}if(count == col - 1)return board[i][1];}//判断列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];}}//判断对角线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];}//平局if (IsFull(board, row, col)){return 'Q';}//游戏继续return 'C';
}

3.test.c

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"game.h"void menu() 
{printf("****************\n");printf("**1.play 0.exit**\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);//判断输赢ret = IsWin(board, ROW, COL);if (ret != 'C'){break;}DisplayBoard(board, ROW, COL);ComputerMove(board, ROW, COL);//	判断输赢if (ret != 'C'){break;}DisplayBoard(board, ROW, COL);}if (ret == '*'){printf("玩家赢!\n");}else if (ret == '#'){printf("电脑赢!\n");}elseprintf("平局\n");DisplayBoard(board, ROW, COL);}int main() {srand((unsigned int)time(NULL));//设置随机数int input = 0;do {menu();//打印菜单printf("请选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 2:printf("退出游戏\n");default:printf("选择错误!\n");break;}} while (input);return 0;
}

http://www.ppmy.cn/news/381267.html

相关文章

C语言 三子棋小游戏

因为代码有些多&#xff0c;所以使用了头文件来方便理解。 void initial(char arr[ROW][COL],int row,int col) //初始化棋盘函数 { for(row0;row<ROW;row) {for(col0;col<COL;col){arr[row][col] ;printf("%c",arr[row][col]);if(col<COL -1)printf(&qu…

C语言初级小游戏——三子棋

目录 前言 一、游戏的设计思路 1.游戏模式 2.设计模块 二、分层说明 1.game.h文件 1.1 在此文件中&#xff0c;我们对其它需要在此游戏中实现的功能所对应的函数库进行了包含 1.2 进行符号定义 1.3 函数声明 2.game.c文件 2.1 对二维字符数组进行初始化 2.2 展示棋盘…

【C语言】三字棋小游戏详解

前言&#xff1a;今天我们来用C语言写一个三子棋小游戏&#xff0c;三子棋&#xff0c;是黑白棋的一种。三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉、一条龙、井字棋等。这里我们写的是玩家与电脑对战的一个代码&#xff0c;如果想跟朋友一起玩也可以自己稍作修…

【C语言】三子棋小游戏设计

设计思路大致如下&#xff1a; 将游戏函数与主函数分块&#xff0c;主函数需要调用另一个源文件里的游戏函数&#xff0c;则在自定的头文件里要做好声明&#xff0c;头文件如下 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #inclu…

【C语言小游戏】猜数字游戏

hello&#xff0c;csdn的小伙伴呢&#xff0c;在前面&#xff0c;我们已经初步了解了c语言&#xff0c;并且系统的学习了分支与循环的内容。今天我们就将分支与循环的内容综合应用一下&#xff0c;来做一个很简单猜数字小游戏。 目录 程序的需求以及最终代码展示 一、实现打印…

【C语言入门小游戏】三子棋

快点点赞 目录 文本目录 前言 一、游戏整体思路 二、代码实现以及思路 1.棋盘的初始化 2.棋盘的打印 3.玩家下棋 4.电脑自动下棋&#xff08;智障化下棋&#xff09; 5.判断输赢 三、代码的运行 前言 相信很多学习c语言的小伙伴都想设计一款属于自己的小游戏吧&#xff0c;那…

《C语言初阶》 猜数字小游戏

大家好&#xff0c;这篇文章主要教大家写个小游戏&#xff0c;学习编程的时候我们肯定都有一个梦想就是想写出属于自己的游戏。这次&#xff0c;我们就从0到1开始写一个非常简单的猜数字小游戏&#xff0c;当你写完时和你的朋友一起玩吧! 首先&#xff0c;我们制定一些游戏规则…

趣讲用c语言实现三子棋小游戏

目录 直接先看看最后运行效果吧 三子棋如何设计的&#xff0c;及其步骤 1&#xff0c;源文件已经头文件的创建 2.创建主函数 3.test函数的创建 4.game函数的创建和运行 5.五个函数的实现 a.init_board的实现 b.print_board的实现 c.player_move的实现 d.computer_mo…