台球斯诺克

一款桌球游戏,简单模拟斯诺克。

底部力度条,可以控制击球力度。

按键 P 可以固定某个力度进行击球。

鼠标右键退出游戏。

附件下载(vs 2019 版):

snooker

探索之路

一个群里的大佬做的 DOS 版我的世界让我想到了这个游戏,后面去看了看 Terraria 的视频,学习了下,做了个极其简陋的沙盒游戏

开发环境:VS2019 + EasyX_20210730

游戏说明:

一个类似于二维版我的世界和泰拉瑞亚的沙盒游戏,你可以建造属于你的一片天地

(但因为目前方块过少,效果极其单调。。)

WASD 键:移动

Q 键:打开制作页面,再次按下返回

E 键:打开背包页面,再次按下返回

R 键:查看角色属性

ESC:设置页面(可调整为观察模式、普通模式,查看当前坐标)

大键盘1键:保存!!

制作页面:鼠标滚轮选择目标制作物品(部分物品需在工作台或熔炉旁才能制作)

背包页面:鼠标选中背包物品后拖动至使用栏便可更换使用栏物

...

合成立方体 (模仿)

游戏介绍

在 4399 上面看到一个很有趣的小游戏:合成立方体(游戏原地址)。

游戏中,玩家需要通过所给的形状去尽可能拼凑出完整的一行一列,然后完整的行列会增加分数,一旦所给的形状无法被塞下,游戏结束。非常简单的游戏,我用了 EasyX 去复原了一下。

游戏运行截图如下:

游戏源码下载

点击这里下载游戏完整源代码

井字棋(release)

说明

简易实现了井字棋,未使用深搜算法。

基本原理

设立气的概念:

棋子的气:己方棋子的气大小为 1,对手棋子气的大小为 -1。

总气:所有外气的和,己方尽可能提高这个值,对手是负降低这个值。同理可推算中心点四个气,角三个,边两个。

外气:一共八个外气,对应两个对角线以及横竖三条线,气的大小对应该条线上的棋子气之和。

内气:一共九个内气,对应棋谱的九个位置,每个位置的气为该位置涉及到的外气之和。

计算步骤:

1. 优先处理外气为 2 的位置,该位置是己方的胜利位置。

2. 其次处理外气为 -2 的位置,该位置是对手的获胜位置。

3. 然后处理内气位置为 2 的位置,该位置是己方的绝杀点。

4. 然后对于一个进行区别对待:有一个情况边优先度比中心点高。

5. 如果中间位置没有占,占中间位置。

6. 遍历内气,取得有意义的内气的中值,二次遍历,找内气大小是中值的位置,在这些位

...

七巧板Plus

游戏介绍

鼠标左键拖动图形移动,松开时自动吸附,按下 ctrl 键的同时拖动则不进行吸附,右键单击图形顺时针旋转 45°,ESC 结束游戏。

新增内容

1. 增加了点吸附效果,拖动图形松开后,触发边吸附的同时也会触发点吸附。

2. 拖动图形的同时,若按下 ctrl 键,则不会进行吸附。

不定期更新,力求完善。。。

程序说明

简要介绍程序中的一些点。

属性

使用模板类和 lambda 表达式实现了属性,用于对外暴露字段,详见 C# 属性。

使用属性可以简化程序,减少繁琐的 get 函数和 set 函数,提高了程序的可读性。

因为是自行封装的属性,所以存在很大的缺陷,很大程度上增加了类的大小(因为把函数成员变成了数据成员),属性的重写以及访问控制的不完善等。

对象管理机制

使用 Tangram 类来管

...

Tony's Jumper

介绍

这是一个模仿 Doodle Jump 的小游戏,实现了原游戏中的部分元素。

             

操作说明

由于没有重力感应,所以用键盘替代。

按下 A/D 或方向键会给予角色水平向左或向右的恒定加速度,此加速度可以在 OPTIONS 界面通过改变灵敏度来调节。同时角色也受水平阻力影响,阻力大小与水平速度的平方成正比,因此达到一定速度会变为匀速运动。竖直方向只受重力加速度,碰到平台或踩到怪物会获得一定的初速度。

鼠标点击可向光标方向射击(只能向角色上方区域发射),怪物头上的一个红点代表一点生命值,为零时被击落。

其他操作见游戏中的 HELP 界面。

文件说明

  • game.h/cpp: 全局常量,点、向量、得分等基本结构体,以及计算、文件、声音、图像处理等函数。
  • interface.h/cpp: 游戏界面类,
...

简单的音乐游戏

介绍

这是一款十分简单的音乐游戏。

编译环境:Visual Studio 2019,EasyX_20210730

游戏说明

  1. 介绍:玩家需根据音乐节奏,控制方向块,接住不断靠近的 note。
  2. 控制:Q 逆时针旋转,W 后移,E 顺时针旋转,ESC 暂停游戏,具体可于游戏中进行设置。 
  3. 若想游玩其他谱面可以访问 osu 或镜像站 v mirror (推荐 使用时可以下载其中的MINI谱面,减少不必要的空间占用)下载谱面 并将下载的 .osz 文件以 zip 格式打开并解压到 obm 文件夹中。
  4. 对于任何音乐游戏,包括该游戏都建议从最低难度开始。

项目共包含以下文件

源程序文件:

  1. main.cpp 主程序。
  2. Control.h/cpp 游戏控制部分 包含类 keycheck 单独按键控制,timer 计时器,FPSCounter 帧数计算。
...

数字拼图游戏

这是一个简易的拼图游戏。

其实很多时候,精彩的游戏不一定非要用图片。将游戏的功能和手感都做好,游戏一样好玩。

所以我就做了这个拼图游戏当作例子。运行效果如下:

完整的 VC 源代码如下:

/////////////////////////////////////////////////////////
// 程序名称:数字拼图游戏
// 编译环境:Visual C++ 2010,EasyX_20210730
// 作    者:慢羊羊
// 发布日期:2021-3-26
// 最后修改:2021-8-3
//
#include <graphics.h>
#include <time.h>
#include <conio.h>


IMAGE	g_Block[16];		// 拼图碎片
byte	g_Map[4][4];		// 游戏地图(存储了每个碎片的下标)
byte	g_E
...

Logic Pic(模仿)

程序介绍

模仿手游 Logic Pic 做的游戏。

 

游戏介绍

玩法

根据数字的提示,左键点击白色方格,将其变为黑色,使每一行(列)的黑色方格,满足这一行(列)的数字,右键白色方格将此方格变为禁止状态,意为不涂,便于解题。左键(右键)黑色(灰色)方格,可取消其状态,变为白色普通方格。

当所有行(列)的黑色方格都满足该行(列)的数字时,解密成功。

例:3   :该行(列)三个黑色方格在一起,如上图第二列。

例:2 1:该行(列)一共有黑色方格,但是 2 和 1 需要分隔开,如上图第五列。

功能按钮

提示按钮,游戏界面下方第一个。随机获得一行(列)的正确答案,可能会出现在已经被填涂的行(列)。每局游戏只能使用一次,请谨慎使用。

记录按钮,游戏界面下方第二个。记录当前所有方格的状态。不限使用次数,但会覆盖原来的数据。

回退按钮,游戏界面下方第三

...

贪吃蛇(纯C++)

游戏说明

这是一个传统的贪吃蛇游戏,基于链表实现

界面设计参考了 https://codebus.cn/aknoi/a/snake

按键说明

  • 方向控制:↑↓←→ 或者 Q(逆时针),R(顺时针)
  • 速度:按下 space 加速,‘[’ 减速,‘]’ 加速 
  • 食物:小键盘 + 增加食物,小键盘 - 减少食物 
  • 其他:非小键盘数字键 9、0 可以调整帧率,小键盘 * 可以切换贪吃蛇模式,F1 帮助,F11 截屏

状态栏说明

  • 生命状态:贪吃蛇是否存活,由于没有设置死亡,所以只有存活和濒死两种状态
  • 等级:每吃 10 个食物升一级
  • 分数:每个食物 10 分
  • 速度:默认速度 0 ,可以调节,最快 10,最慢 -10
  • 长度:
...

双人击球游戏

游戏说明

Player1 玩家通过 W、S 按键控制左板上下移动,Player2 玩家通过 O、L 按键控制右板上下移动。在游戏过程中,小球的速度会随着接触木板的次数增加而加快,增加游戏难度。当小球没有碰到木板时游戏结束。

效果图

完整代码

///////////////////////////////////////////////////
// 程序名称:双人击球游戏
// 编译环境:VS2010,EasyX_20200902
// 作  者:温良
// 最后修改:2021-1-31
//

#include <graphics.h>
#include <conio.h>

int main()
{
	initgraph(640, 480);
	srand(GetTickCount());
	setbkcolor(WHITE);
	cleardevice();

	setfillco
...

2048游戏(高仿版)

实现原理

作为一名Oier,我会告诉你,整个程序用到的只有一种算法,那就是:模!拟!

(而且本游戏的灵感就来源于我做过的一道OI题)

既然是模拟,那么按照游戏流程编制就行了。整个程序分为这样几个部分:

  1. 初始化
  2. 绘制界面
  3. 玩家移动,并计算生成新棋盘、计算分数
  4. 返回 步骤2. 直至游戏结束 或 胜利

依次实现即可(详见代码)。

游戏方法

先贴一张运行截图:

可使用 WASD 或 方向键 进行游戏。

游戏结束后,可选择重新开局 或 退出游戏。

完整源码

该项目的 github 地址:https://github.com/Dashu-Li/2048Game

完整代码如下:

// 程序名称:2048Game
...

见缝插针

游戏说明

使用鼠标左键点击发射针,当两个针的夹角小于一定限制时,游戏结束。

亮点

这个游戏比较创新的地方就是可以用鼠标控制一个动态的过程,在循环中使用鼠标点击,并且鼠标消息不受延时函数的影响。以前写代码的时候,由于鼠标消息的原因,所以会选择多线程,但是参考了正确处理鼠标消息这篇文章,了解了鼠标消息的正确用法后,觉得有必要试试,就写了一个见缝插针游戏。我觉得学习不仅就是把别人的东西学会,而且需要在学习之后实践。

期待

见缝插针游戏我只是写了一个大致的框架,重点是为了实践鼠标消息的处理,如果需要将这个游戏进一步开发,可以在针的转速,长短,以及在插在球上面针的数量上进行设置不同的关卡。

效果图

代码

///////////////////////////////////////////////////
// 程序名称:见缝插针
...

扫雷(联网对战版)

一、简介

单机版扫雷总会有些枯燥,不妨试试联网对战版扫雷!

开发环境:VS2019 + EasyX_20210224。

游戏玩法:左键按下翻开方块,翻开雷判输,或翻开最后一个方块判赢;逃跑或超时会结束本轮连接,正常结束会自动重新开局,对手不变。

目的:一方面提供联网对战版扫雷供大家娱乐,另外也是重构曾经写过的扫雷单机版,最后也为了练习 Windows 网络编程。

二、网络

关于 Windows 网络编程书籍,推荐朱晨冰老师的《Visual C++ 2017 网络编程实战》,出版日期 2020 年。

个人感觉这本书讲解比较细致,内容也不会太老旧,有计网基础会更容易理解学习。

程序采用阻塞套接字编写,因此服务器免不了使用多线程,多线程部分由 C++11 提供。

想要让程序不限于局域网通信又不想购买服务器,这里推荐花生壳软件,操作简单,TCP 部分免费使用,相关内容自行搜索。

三、程序文件

...