一个超好玩的三子棋小游戏

2024-02-12 19:20
文章标签 三子 小游戏 好玩

本文主要是介绍一个超好玩的三子棋小游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 写在前面
  • 三子棋游戏的布局
  • 游戏的内容实现
  • 总结

在这里插入图片描述

写在前面

今天我要给大家介绍一下三子棋小游戏的简易制作。今天我们将主要用到C语言的数组知识来实现这个小游戏,相信这个游戏大家平时也都有玩过,现在我就来给大家介绍一下。

三子棋游戏的布局

这个游戏我们将把代码放在三个文件中:game.c,game.h,test.c。
在这里插入图片描述
game.h这个头文件将用了存放一些函数申明的内容及一些将会用到的头文件,还有一些宏定义。

#define ROW 3
#define COL 3#include <stdio.h>
#include <stdlib.h>
#include <time.h>//函数实现
//初始化棋盘
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);

game.c这个文件是用来写游戏主内容。
test.c这个文件是用来测试游戏的。

游戏的内容实现

首先是打印游戏菜单,用menu函数来封装一下:

void menu()
{printf("******************************************\n");printf("**********欢迎来到三子棋菜单界面************\n");printf("***********        1.play      ***********\n");printf("***********        0.exit      ***********\n");printf("******************************************\n");
}

然后打印提示,让玩家选择1和0,输错了就提示一下玩家,用循环包装起来,直到玩家输入0退出游戏时,游戏结束,所以主函数内容为:

int main()
{srand((unsigned int)time(NULL));int input = 0;do{menu();printf("请输入你的选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏!\n");break;default:printf("选择错误,请重新输入!\n");break;}} while (input);return 0;
}

当玩家选择1是,进入game这个函数进行玩游戏,game这个函数一个如何书写呢?
首先我们的打印一个棋盘,像这样的一个简易棋盘。
在这里插入图片描述
我们应该创建一个三行三列的字符二维数组存放玩家和电脑下棋位置信息,玩家的棋可以用‘*’表示,电脑的棋可以用‘#’表示。

char Board[ROW][COL] = { 0 };

先用创建一个函数用空格初始化数组:

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] = ' ';}}
}

接下来就是打印棋盘,用循环和if语句控制,打印棋盘,创建一个打印棋盘函数:

void DisplayBoard(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++){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");}}
}

接下来就是进入这样一个环节

//显示棋盘DisplayBoard(Board, ROW, COL);while (1){//玩家走PlayerMove(Board, ROW, COL);DisplayBoard(Board, ROW, COL);ret = IsWin(Board, ROW, COL);if (ret != 'C'){break;}//电脑走ComputerMove(Board, ROW, COL);DisplayBoard(Board, ROW, COL);ret = IsWin(Board, ROW, COL);if (ret != 'C'){break;}}if (ret == '*'){printf("玩家赢\n");}else if (ret == '#'){printf("电脑赢\n");}else if (ret == 'Q'){printf("平局!\n");}

玩家和电脑每走一步,显示一下棋盘,并且判断一下输赢,其中IsWin这个函数会返回四种字符’*’ ‘#’ ‘Q’ 和 ’C‘分别表示玩家赢,电脑赢,平局,继续,函数实现如下;

char IsWin(char Board[ROW][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][0] != ' '){return Board[i][0];}}//判断三列for (i = 0; i < col; i++){if (Board[0][i] == Board[1][i] && Board[1][i] == Board[2][i] && Board[0][i] != ' '){return Board[0][i];}}//判断对角线if (Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[0][0] != ' '){return Board[0][0];}if (Board[0][2] == Board[1][1] && Board[1][1] == Board[2][0] && Board[2][0] != ' '){return Board[0][2];}//平局if (IsFull(Board, row, col) == 1){return 'Q'; //主程序平局设置为符号Q}return 'C';//主程序玩家电脑未分胜负设置为符号C
}

其中涉及到一个IsFull这样一个函数判读棋盘是否满了,满了返回1,没满返回0:

//满了返回1,没满返回0
int IsFull(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++){if (Board[i][j] == ' '){return 0;}}}return 1;
}

接下来就来介绍ComputerMove和PlayerMove这两个函数,先看PlayerMove这个函数,玩家只需要输入要落下棋子的的坐标,再判断坐标是否合法,是否需要重新输入,落下位置是否为空格,这些都是我们要考虑的,电脑下棋就是用随机数生成函数来解决,也是需要考虑这些因素,从而得到一个合法的坐标,两个函数实现如下:

void PlayerMove(char Board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("玩家走:>");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");}}else{printf("输入坐标不合法,请重新输入!\n");}}
}void ComputerMove(char Board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("电脑走:>\n");while (1){x = rand() % row;y = rand() % col;if (Board[x][y] == ' '){Board[x][y] = '#';break;}}
}

这样一个游戏我们就实现来我们可以先试着玩一把
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样我们就玩完了一把。大家也可以去尝试一下。

总结

今天的分享就到此结束。欢迎大家点赞支持和纠正~
在这里插入图片描述

这篇关于一个超好玩的三子棋小游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/703385

相关文章

贪吃蛇的小游戏--用C语言实现

贪吃蛇的小游戏–用C语言实现 游戏背景 贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅块,扫雷等游戏位列经典游戏的⾏列。 实现基本的功能: • 贪吃蛇地图绘制 • 蛇吃⻝物的功能 (上、下、左、右⽅向键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分 • 蛇⾝加速、减速 • 暂停游戏 技术要点 C语⾔函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32

MFC对话框贪吃蛇小游戏

花了近一个月的时间,学习了一下VC++深入详解,做了个贪吃蛇小游戏,虽然有很多的瑕疵,但还是想分享一下战果。 说一下思路: ①我们要绘制图形,我们可以用CClientDC(客户区设备上下文,与特定的窗口关联)声明一个dc对象作图。 当然这里我们要画蛇的身体和食物,设置一个食物类和蛇身体结构体 ②我们如何让图形动起来?SetTimer创建一个计时器,KillTimer()用来销毁计时器

GameFi生存法则:从巨头争霸到小游戏革命,掀起区块链游戏的全新风暴

随着区块链技术的飞速发展,GameFi(游戏与去中心化金融的结合)正成为加密世界的一个重要领域。然而,随着时间的推移,这一领域也经历了显著的演变,从最初的3A大作到如今流行的Telegram小游戏,这种变化不仅反映了市场需求的转变,也揭示了GameFi如何在生存与繁荣之间找到平衡。 一、GameFi 的演变:从 3A 大作到 Telegram 小游戏 不同类型 GameFi 项目的优劣 Ga

Unity实战案例 2D小游戏HappyGlass(模拟水珠)

本案例素材和教程都来自Siki学院,十分感谢教程中的老师 本文仅作学习笔记分享交流,不作任何商业用途 预制体   在这个小案例中,水可以做成圆形但是带碰撞体,碰撞体比图形小一圈,顺便加上Trail renderer组件   材质 将碰撞材质的friction为0,bonciness可以按照需要修改 脚本  生成水珠的脚本并不难, 只是需要创建大量实例化对象的时候,加一个携程

UNO小游戏2

前言 hello,大家好我是文宇。最近也是抽出时间更一期了。 bug还是很多(恼),所以就当个乐子看看,反正后面还会有的,先把这玩意儿发了再说。 正文 #include<bits/stdc++.h>#include<windows.h>using namespace std;bool can = 1;int colorsz1[25];int cardsz1[25];int co

C++战列舰小游戏Lv. 1.2版本(半成品)

这是一组初始数据: a[1].gas=1000;     a[1].attack=0;     a[1].att_1=0;     a[1].att_2=0;     a[1].att_3=0;     a[1].att_4=0;     a[1].fire=0;     a[1].gas_good=0.9;     a[1].guard=0;     a[1].HP=15000;     a[

来看看两种好玩的方法,扩展方法和分部方法

好久没过来扯淡了,话说这年头还有偶遇的事情吗?比如国庆回家的汽车上有个妹子要你qq,要你微信,想着法子跟你聊天,然后睡了一觉,醒来发现 肾不见了?小花絮小花絮,要是肾真没了,也吹不了牛,败不了火了,继续言归正传。   一:扩展方法        说到扩展方法,我想大家都已经再熟悉不过了,也许你的解决方案中有无数个这样的扩展方法,自从有了Linq之后,我们的集合就再也不单纯了。

C++实现简易俄罗斯方块小游戏

实现一个简易的俄罗斯方块(Tetris)游戏涉及多个方面,包括图形显示、游戏逻辑、用户输入等。下面是一个简化版本的俄罗斯方块游戏的实现步骤和代码示例。这个实现会使用 C++ 和一个简单的图形库——如 SFML(Simple and Fast Multimedia Library),这是一个非常适合游戏开发的跨平台图形库。 1. 环境准备 -安装 SFML: 你可以从 SFML 官网 下载适合你

Unity实战案例 2D小游戏HappyGlass(画笔摇晃效果)

本案例素材和教程都来自Siki学院,十分感谢教程中的老师 本文仅作学习笔记分享交流,不作任何商业用途 using System.Collections;using System.Collections.Generic;using UnityEngine;public class Pencil : MonoBehaviour{//摆动速度public float pencilSpeed

第一次使用Egret开发微信小游戏经验总结(包括排行榜排序,每周一数据清零,超越好友等处理)

转自:https://blog.csdn.net/xw1110280055/article/details/82469825 最近项目组立项了个小游戏,用Egret(白鹭)开发,本来游戏核心功能2天就完成了,后来准备接入微信好友排行榜的时候,用到了子域,加入分享给好友的时候,图片合成后分享给微信好友有时候不能显示出图片内容。现整理一下,避免大家踩坑。 好友排行榜微信只让我们在开放数据域(后文都简