使用VS制作一个小游戏(五子棋)

一、前期准备:

下载Visual Studio(以下使用的是VS2017)
下载Easyx库:官方easyx库下载 右上方下载

二、思路理解

(本次是简单的单机双人五子棋)

1、初始化一个15*15的棋盘,将空棋盘每个位置赋值0

2、若玩家1放下一颗棋子,则将棋盘上的值置为1,玩家2同理

三、完整代码

#include <iostream>
#include<graphics.h>
using namespace std;int a[15][15] = { 0 }; //定义棋盘的全局变量
MOUSEMSG mouse; //定义鼠标的全局变量//自定义的子函数
void init();        //初始化界面
void put(int penson, int x, int y); //在二位数组将元素置为非空,相当于放下棋子
void drow_Black(int x, int y);      //画黑棋
void drow_White(int x, int y);      //画白棋
int change(short k);                //将棋盘与二位数组映射,方便判断输赢
void show(int person);              //胜利时显示的界面
bool Check_Win(int person, int x, int y);   //调用各种函数,判断是否胜利
bool Check_LeftAndRight(int person, int x, int y);  //检索棋盘左右是否五颗相连
bool Check_TopAndButton(int person, int x, int y);  //检索棋盘上下是否五颗相连
bool Check_LeftAndDiagonal(int person, int x, int y);   //检索棋盘左斜是否五颗相连
bool Check_RightAndDiagonal(int person, int x, int y);  //检索棋盘右斜是否五颗相连int main()
{//加载画面init();int x, y;int person=1;FlushMouseMsgBuffer();// 清空鼠标消息缓冲区while (true){mouse = GetMouseMsg();// 获取一个鼠标消息。如果没有,就等待if (mouse.uMsg == WM_LBUTTONDOWN)   //是否按鼠标左键{x = change(mouse.x);y = change(mouse.y);if (x >= 0 && x < 15 && y >= 0 && y < 15){if (a[x][y] == 0){if (person == 1){ //画黑键drow_Black(x, y);//给数组位置赋值put(person, x, y);//判断是否胜利if (Check_Win(person, x, y)){show(person);system("pause");}person = 2;}else{drow_White(x, y);//给数组位置赋值put(person, x, y);//判断是否胜利if (Check_Win(person, x, y)){show(person);system("pause");}person = 1;}}}            }}return 0;
}//初始化系统
void init()
{initgraph(720, 600); // 初始图形化界面,宽高  loadimage(NULL, "1.jpg");             //背景图片//给幕布画线setlinecolor(BLACK);//line(int x1, int y1, int x2, int y2);        // 画线for (int i = 50; i <= 500; i += 30)line(50, i, 500, i);for (int i = 50; i <= 500; i += 30)line(i, 50, i, 500);
}//放下棋子
void put(int penson, int x, int y)
{//玩家1则置为1,玩家2则置为2if (penson == 1){a[x][y] = 1;}else{a[x][y] = 2;}
}//画黑键
void drow_Black(int x, int y)
{setfillcolor(BLACK);int x1 = 50 + x * 30 + 15;int y1 = 50 + y * 30 + 15;fillcircle(x1, y1, 10);
}//画白键
void drow_White(int x, int y)
{setfillcolor(WHITE);int x1 = 50 + x * 30 + 15;int y1 = 50 + y * 30 + 15;fillcircle(x1, y1, 10);
}//棋盘与二维数组的映射
int change(short k)
{int n = (k - 50) / 30;int n1 = (k - 50) % 30;if (n1 > 0){n = n + 1;}return n - 1;
}//展示胜利框
void show(int person)
{cleardevice();//清空画布loadimage(NULL, "11.jpg");//setbkcolor(0x005498);//设置背景颜色settextcolor(RGB(60, 100, 150));//设置字体颜色settextstyle(80, 20, _T("微软雅黑"));if (person == 1){outtextxy(130, 350, _T("黑色方,你赢了!"));}else{outtextxy(130, 350, _T("白色方,你赢了!"));}}//检索左右
bool Check_LeftAndRight(int person, int x, int y)
{int count = 0;int flag[15] = { 0 };//左右同时检索for (int i = 0; i <= 15; i++){if (x - i >= 0 && a[x - i][y] == person){flag[x - i] = person;}else if (x + i <= 14 && a[x + i][y] == person){flag[x + i] = person;}}for (size_t i = 0; i < 15; i++){if (flag[i] != 0){count++;}else if (count == 5){return true;}else{count = 0;}}return false;
}//检索上下
bool Check_TopAndButton(int person, int x, int y)
{int count = 0;int flag[15] = { 0 };//上下同时检索for (int i = 0; i <= 15; i++){if (y - i >= 0 && a[x][y - i] == person){flag[y - i] = person;}else if (y + i <= 14 && a[x][y + i] == person){flag[y + i] = person;}}for (size_t i = 0; i < 15; i++){if (flag[i] != 0){count++;}else if (count == 5){return true;}else{count = 0;}}return false;
}
//检索左倾斜角
bool Check_LeftAndDiagonal(int person, int x, int y)
{int count = 0;int flag[15] = { 0 };//倾斜上下同时检索for (int i = 0; i <= 15; i++){if (x - i >= 0 && y - i >= 0 && a[x - i][y - i] == person){flag[x - i] = person;}else if (x + i < 15 && y + i < 15 && a[x + i][y + i] == person){flag[x + i] = person;}}for (size_t i = 0; i < 15; i++){if (flag[i] != 0){count++;}else if (count == 5){return true;}else{count = 0;}}return false;
}//检索右倾斜角
bool Check_RightAndDiagonal(int person, int x, int y)
{int count = 0;int flag[15] = { 0 };//倾斜上下同时检索for (int i = 0; i <= 15; i++){if (x + i < 15 && y - i >= 0 && a[x + i][y - i] == person){flag[x + i] = person;}else if (x - i >= 0 && y + i < 15 && a[x - i][y + i] == person){flag[x - i] = person;}}for (size_t i = 0; i < 15; i++){if (flag[i] != 0){count++;}else if (count == 5){return true;}else{count = 0;}}return false;
}//判断是否胜利
bool Check_Win(int person, int x, int y)
{//检查左右if (Check_LeftAndRight(person, x, y)){return true;}//检查上下else if (Check_TopAndButton(person, x, y)){return true;}//检查左斜else if (Check_LeftAndDiagonal(person, x, y)){return true;}//检查右斜else if (Check_RightAndDiagonal(person, x, y)){return true;}else{return false;}
}

四、生成在其他电脑也可执行的exe文件

五、运行结果


使用VS制作一个小游戏(五子棋)相关推荐

  1. 表白小游戏教程:制作一个小游戏送给喜欢的TA(不会编程也能学会哦)

    大家好哇~ 欢迎翻开波波和阿菌的长篇故事~ 不过捏,今天我们不讲故事,今天将由阿菌和大家分享一个小教程:教大家制作一个小游戏,可以用来送给喜欢的人.无须任何计算机专业基础,只要能操作电脑,并在初一的数 ...

  2. 虚幻4学习笔记(8)动手制作一个小游戏

    动手制作一个小游戏 新节点介绍 前期准备 搭建场景 门蓝图 灯蓝图 创建关卡蓝图 B站UP谌嘉诚课程:https://www.bilibili.com/video/BV164411Y732 新节点介绍 ...

  3. Pygame:编写一个小游戏

    大学最后的考试终于结束了,迎来了暑假和大四的漫长的"自由"假期.当然要自己好好"玩玩"了. 我最近在学习Python,本意是在机器学习深度学习上使用Python ...

  4. 【游戏思路】制作简单小游戏实现思路总结

    很多小伙伴在制作游戏的时候苦于没有思路,实际上制作一个游戏是很简单的,我们可以先从小游戏开始思考. 小游戏的概念和分类 概念:单机或联机类型,操作简单,效果简单,体积不大,玩法单一类型. 特点:体积小 ...

  5. 使用python制作聊天框解谜游戏_使用Python写一个小游戏alien invasion!

    最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下其中的 ...

  6. python能制作游戏吗_如何用python写一个小游戏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游 ...

  7. python经典小游戏五子棋,适合python编程的小游戏

    python入门可以做的小游戏 1.Python入门拼图小游戏简单介绍:将图像分为m×n个矩形块,并将图像右下角的矩形块替换为空白块后,将这些矩形块随机摆放成原图像的形状. 2.Python入门推箱子 ...

  8. python编的俄罗斯方块游戏_手把手制作Python小游戏:俄罗斯方块(一)

    手把手制作Python小游戏:俄罗斯方块1 大家好,新手第一次写文章,请多多指教 A.准备工作: 这里我们运用的是Pygame库,因为Python没有内置,所以需要下载 如果没有pygame,可以到官 ...

  9. python图形小游戏代码_手把手制作Python小游戏:俄罗斯方块(一)

    手把手制作Python小游戏:俄罗斯方块1 大家好,新手第一次写文章,请多多指教 A.准备工作: 这里我们运用的是Pygame库,因为Python没有内置,所以需要下载 如果没有pygame,可以到官 ...

最新文章

  1. 如何仅从SQL Server DateTime数据类型返回日期
  2. 2020 版 Python 数据清理终极指南!
  3. mysql 启动服务错误
  4. 822C Hacker, pack your bags!
  5. c++拷贝构造函数(深拷贝和浅拷贝)
  6. 概要设计说明书模板_实验报告的书写案例word模板
  7. 软考论文-高项-进度管理、风险管理
  8. DWM1000开启后TX、RX、SFD、RXOK均不亮的原因
  9. java分组求和实例_mybatis example group by count 分组求和 - java分组求和
  10. 怎么开发直播短视频源码?
  11. leetcode第197场周赛 之 5211概率的最大路径
  12. 2-软件生命周期模型
  13. 7-13 寻找大富翁 (25分)
  14. FPGA系统性学习笔记连载_Day8【4位乘法器、4位除法器设计】 【原理及verilog实现、仿真】篇
  15. 可调式减压阀行业现状调研及趋势分析报告
  16. NETDMIS5.0自动测量球2023
  17. 登录webqq得金山快盘空间5G
  18. linux服务器磁盘满了怎么办
  19. 百度人脸识别API 的使用
  20. Linux命令+基础知识

热门文章

  1. Java设计模式之(四)——原型模式
  2. 有一头母牛从第四年php,递归求解母牛生小牛问题
  3. 福昕PDF编辑器手机版4.0发布,让PDF跟Word一样简单
  4. Mac如何实现剪切的功能
  5. 计算机能识别用户的物理身份,(完整版)劳顿管理信息系统习题集-第8章信息系统安全...
  6. 规则引擎与风控系统02:规则引擎
  7. 神技 | 给U盘安装Ubuntu操作系统
  8. 一键批量修改PPT所有页面的字体样式、大小和颜色的方法
  9. 攻击工具SYN Flood的源代码
  10. 22-04-02周总结