C语言:-三子棋游戏代码:分支-循环-数组-函数集合

server/2025/1/17 4:43:35/

思路分析:

1、写菜单

2、菜单之后进入游戏的操作

3、写函数 实现游戏

        3.1、初始化棋盘函数,使数组元素都为空格

        3.2、打印棋盘 棋盘的大概样子

        3.3、玩家出棋

                3.3.1、限制玩家要下的坐标位置

                3.3.2、判断玩家要下的位置是否由棋子

        3.4、电脑出棋

                3.4.1、用随机数 让电脑随机生成坐标

        3.5、判断玩家和电脑谁赢了

代码实现

game.h文件

#ifndef _GAME_H
#define _GAME_H
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.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 ct_move(char board[ROW][COL], int row, int col);
char Iswin(char board[ROW][COL], int row, int col);
#endif

game.c--游戏算法实现

#include "game.h"
//初始化数组为 空格
void Initboard(char board[ROW][COL], int row, int col)
{int i = 0;int 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;for (int i = 0; i < row; i++){int j;for (j = 0; j < col; j++){//打印 空格 数组元素 空格printf(" %c ", board[i][j]);//最后一列不打印 |if (j < col - 1){printf("|");}}printf("\n");//最后一行不打印 —--if (i < row - 1){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, y;printf("玩家走->:\n");//不到停止条件 一致循环while (1){printf("请输入要下的坐标:\n");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("该坐标被占用!");}}else{printf("坐标非法,请重新输入");}}
}//电脑出棋
void ct_move(char board[ROW][COL], int row, int col)
{int x, y;printf("电脑走->:\n");//用sand函数 使电脑生成0-2的随机数x = rand() % row;y = rand() % col;while (1){if (board[x][y] == ' '){board[x][y] = '#';break;}}
}//看棋盘是否下满了
int isfull(char board[ROW][COL], int row, int col)
{int i ,j;for(i = 0;i < row;i++){for(j = 0;j < col;j++){//如果数组元素中还有 空格 那就返回 0if(board[i][j] == ' '){return 0;}            }}return 1;
}//看玩家和电脑谁赢了
char Iswin(char board[ROW][COL], int row, int col)
{int i;//横相等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][0];}}//竖相等for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){return board[i][0];}}//从左到右 对角线相等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];}//棋盘满了返回 1  再返回 q  平局if(1 == isfull(board,ROW,COL)){return 'q';}//如果以上条件都不满足,返回 'c' 表示游戏继续进行。return 'c';
}

test.c---测试文件

#include "game.h"
// 菜单栏
void menu()
{printf("=========================\n");printf("=========================\n");printf("========三子棋1.0=========\n");printf("===1 开始游戏==0 退出游戏==\n");printf("=========================\n");
}
// 游戏的算法实现
void game()
{char ret;// 数组-存放棋盘信息char board[ROW][COL] = {0};// 初始化棋盘 使所有元素为空格Initboard(board, ROW, COL);// 打印棋盘Displayboard(board, ROW, COL);while (1){// 玩家下棋playermove(board, ROW, COL);// 下完再打印一次棋盘Displayboard(board, ROW, COL);// 判断玩家是否赢了ret = Iswin(board, ROW, COL);if (ret != 'c'){break;}// 电脑下棋ct_move(board, ROW, COL);Displayboard(board, ROW, COL);// 判断电脑是否赢了ret = Iswin(board, ROW, COL);/**   *玩家赢*    #电脑赢*    c继续游戏*    q平局*/// 如果ret 不等于 c 不继续游戏 那就break 退出游戏if (ret != 'c'){break;}}if (ret == '*'){printf("玩家赢了\n");}else if (ret == '#'){printf("电脑赢了\n");}else if (ret == 'q'){printf("平局\n");}
}void test()
{menu();int input;do{printf("请选择:\n 1-> 开始游戏    0-> 退出游戏\n");scanf("%d", &input);switch (input){case 1:printf("game start!\n");game();break;case 0:printf("game over!\n");break;default:printf("无效选项,请重新选择");break;}} while (input);
}
int main(int argc, char const *argv[])
{// 随机函数srand(time(NULL));test();return 0;
}

效果展示


http://www.ppmy.cn/server/158998.html

相关文章

3d 可视化库 vister部署笔记

目录 vister 开源地址: python版本: 在python3.10以上版本安装 viser, 测试ok的案例: 立方体mesh选中 SMPL-X可视化 ok 推理代码: vister 开源地址: GitHub - nerfstudio-project/viser: Web-based 3D visualization + Python python版本: 在python3.10以上版本…

备战蓝桥杯:树的存储与遍历(dfs和bfs)

树的概念 树的逻辑结构是树形结构&#xff0c;和我们之前的线性结构又不太一样了&#xff0c;是一种一对多的关系 树的结点分为根节点&#xff0c;叶子结点&#xff08;没有分支的结点&#xff09; 以及分支结点 从上往下看&#xff0c;每个结点都有0个或多个后继 从下往上…

Lesson 109 A good idea

Lesson 109 A good idea 词汇 idea n. 主意&#xff0c;想法 复数&#xff1a;ideas 用法&#xff1a;口语&#xff1a;Good idea! 好主意&#xff01;       Big idea! 高见&#xff01;好主意&#xff01;       Great idea! 好主意       Bad idea! 坏主…

leetcode79.单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相…

mysql 双主双从 + proxysql 代理

环境 主机ipmaster1192.168.233.101master2192.168.233.102slave1192.168.233.103slave2192.168.233.104client192.168.233.105 需求 master1和master2互为主从&#xff0c;slave1是master1的从&#xff0c;slave2是master2的从。 master主机通过proxysql代理实现负载均衡的…

迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-新增 topeet子系统-编写 bundle.json文件

bundle.json 文件内容如下所示&#xff1a; 下面是对各个字段的解释&#xff1a; 1. name: "ohos/demos" - 这是组件或项目的名称&#xff0c;这里表示它属于 OHOS&#xff08;OpenHarmony OS&#xff09;生态系统下的一个名为"demos"的组件。 2. descri…

3.flask蓝图使用

构建一个目录结构 user_oper.py from flask import Blueprint, request, session, redirect, render_template import functools # 创建蓝图 user Blueprint(xkj, __name__)DATA_DICT {1: {"name": "张三", "age": 22, "gender": …

《零基础Go语言算法实战》【题目 2-30】并发安全问题

《零基础Go语言算法实战》 【题目 2-30】并发安全问题 请举例说明如何在 Go 语言的 map 中保证并发安全&#xff0c;且需要实现以下接口&#xff1a; type sp interface { Out(key string, val interface{}) } 【解答】 题目中要求并发安全&#xff0c;那么必须用锁&…