Tony's Jumper

介绍

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

             

操作说明

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

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

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

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

文件说明

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

Logic Pic(模仿)

程序介绍

模仿手游 Logic Pic 做的游戏。

 

游戏介绍

玩法

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

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

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

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

功能按钮

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

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

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

...

2048游戏(高仿版)

实现原理

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

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

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

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

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

游戏方法

先贴一张运行截图:

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

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

完整源码

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

完整代码如下:

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

挑战六秒

挑战六秒的说明

编写这个程序的想法来源于生活中的这个小游戏,一般商场等地方就会有这样的一个供路人来玩的“挑战六秒”的小小的装置。看谁能够准确的暂停到六秒整,感觉这个挺有意思,而且很锻炼人的反应能力和预判能力。其实编写这个“挑战六秒”程序的想法很早就产生了,但是由于各种原因,只能等到放假空闲下来编写。编写过程还算顺利,几乎是一气呵成,用了半天时间就编写成功了。

程序编写过程

首先我需要将程序的框架构建成功,主要过程就是按键后程序能够结束循环并暂停。这个实现后接下来就是设计程序界面。以前设计界面我都是用尺子在纸上进行勾绘。最近我发现 CAD 其实更适用。使用 CAD 可以准确的设计布局,并且可以找准坐标。为了更加真实的模仿“挑战六秒”,我需要按照电子数字字体绘制数字。我将电子数字字体分成 7 个模块。并将每个模块单独的编写成函数,每个模块的绘制是比较耗费时间的,这 7 个模块可以根据不同的组合组成需要的数字。为了防止出现闪屏的情况,我使用覆盖的方法将每次产生的数字

...

数独

功能概述

该数独有两种玩法,其一为标准数独,另一为对角线数独。标准数独规则每一行、每一列、每一个粗线宫内的数字均含1-9,不重复;而对角线数独,其相对于标准数独来说就是多了一个条件,即要求两条对角线上的数字分别均含数字1-9,不重复。

PS:设立三种难度,分别根据”完成时间”和”填错次数”来评分。

作者前言

由于我本人能力有限,该小项目是单纯用C和EasyX来实现的,好像并没有涉及高级的算法,基本上都是暴力算法(不用找了,我生成一个数独没有用到回溯法;你看过我的GameInit函数就知道了,没看过的我可以告诉你,其实就是用一个模板,再通过简单的转换,得到一个新的数独)。

因为这仅仅是个作业,而且期末需要预习了,所以我能花的时间不能太多,诸如数独的“提示”“笔记”等功能我想想还是算了,留到以后有时间再来完善。

做这个的初心还是想扎实一下自己的编程语言语法基础,培养项目工程化的思想。当然一路下来BU

...

异世界之光

前言

这是一个策略养成小游戏,虽然几乎谈不上策略。本人蒟蒻一只,代码问题以后会慢慢修改

背景介绍

“我”在一片丛林中迷迷糊糊地醒来,看了看周围杂草丛生的环境,瞪大了眼睛:“我不是在床上睡觉吗!!这什么鬼地方!!”。“我”急忙从地上站了起来,活动活动了全身酸软的肌肉,开始疯狂的破坏。在过了一个多小时的冷静后,“我”终于得出结论——我穿越了。。。

在一个多小时的破坏后,我整理了我现在拥有的物品——睡衣......然后没了,就只有睡衣。但是正当我绝望之时,我看见了一个破茅棚,旁边有一个小湖泊、一颗果树和一本书......一本写着召唤之书四个大字的破书... ... 

我带着满心的疑惑,打开了这本烂让人无法直视的的“召唤之书”。这本破

...

Tony's Snake 3

介绍

一款基于贪吃蛇的小游戏,加入了多种有特殊效果的食物,可以控制蛇向八个方向移动。

这是本系列游戏的第三版,使用了 EasyX 的图形库,并增加了鼠标操作。

此程序是对绘图和鼠标操作的进一步练习,是对多态与类继承的初步学习。

编译环境

  • VC++6.0
  • EasyX 2018 春分版

文件

  • startup.h:一些全局变量
  • startup.cpp:游戏主程序
  • game.h:常量定义,与游戏信息类
  • info.cpp:游戏信息处理,读取外部数据,用于设置
  • element.h:游戏元素基类定义,蛇类,食物类均继承此类
  • element.cpp:基类的实现
  • snake.cpp:蛇类的实现
  • food.cpp:食物类的实现
  • interface.h:界面类定义
  • interfa
...

益智小游戏:交叉线

这是用 C++ 写的益智小游戏“交叉线”(源码在底部)。

本程序的核心在于判断线段是否交叉,需要两种算法:快速排斥实验和跨立实验

包含十三个文件

  • Head.h : 初始化头文件
  • Cross Line.cpp : 程序开端文件
  • Game_Class.h : 游戏类头文件
  • Game.cpp : 游戏类文件
  • Begin.cpp : 初始界面类实现文件
  • Level.cpp : 关卡界面类实现文件
  • Play.cpp : 游戏界面类实现文件
  • Win.cpp : 过关界面类实现文件
  • About.cpp : 关于项目类实现文件
  • Point.cpp : 点的结构类实现文件
  • Line.cpp : 
...

弹幕躲避游戏

游戏说明

1.操作

上下左右移动/选择 shift慢速模式 x清屏 esc退出界面(除了主界面)

2.计分

每帧(1/60秒)计分 原有 + 1 + pluspoint

3.奖励

当达到第六级别后可以奖励一次清屏机会(原有3次

4.关卡结束

关卡结束后有约0.6秒的休息时间

5.慢速模式

速度减少约一半,并显示判定点

6.垂直同步

屏幕刷新与逻辑刷新同步,打开可以减少cpu负担

7.关卡

目前共有五关

8.文件

含有文件 gdat 玩家数据与设置 ; main.cpp 主程序 ;  define.h 定义函数 ; type.h 定义数据与数据结构 ; Title.jpg 标题背景 

9.pluspoint

为黄色的点,获得后可以增加1点pluspoint随关卡等级增加,出现率增加,进入下一关后淸0

...

90% 还原南宫梦吃豆人

MyPacman 作者 bridgeL

开发软件:VS2019

使用的图形库 easyx, 版本 2020-1-9
使用的图片素材 /pacman2/res 来自于网络
项目 github 地址: https://github.com/bridgeL/pacman2

本文对应版本 v1.4.7

特性:迷宫;四只怪物,A*算法,差异化追逐;大力丸,用于反杀怪物;怪物会感受恐惧,四散躲避

游戏运行画面展示

核心框架概述

类图/设计流图

类关系

CMover 派生

CMonster 
CPacman 

...

博弈五子棋(人机对战)算法改进

基于 EasyX 的五子棋程序。

界面依旧,唯一不同的是算法。改进前的 AI 眼光短浅,只顾当前局面。改进后的 AI 使用 DFS(深度优先搜索)进行对博弈树的遍历,再挑选分值最大的根节点进行落子。具体的,就是先算出每个点的当前分值,再递归去寻找落子后对方分值,把这两个值相减,就可以得到这个位置真正的分值。

可是如果直接递归,时间复杂度很大,大约是 O((192)n)( n 为递归次数),于是就加入了两个剪枝(只查找周边有棋子的空位)(如果位置初始分值大于最大分值才递归)和层数限制(只考虑以后4步)。

改进后基本1秒就可以算出来。

运行效果如下:

完整源代码如下:

////////////////////////////////////////////////////////
// 程序名称:博弈五子棋
// 编译环境:Visual C++ 2019	
...

迷宫小游戏

基于 EasyX 的迷宫小游戏,有三种随机生成算法。

包含九个文件

  • Maze.h : 初始化头文件
  • Maze.cpp : 程序开端文件
  • Game.h : 游戏类头文件
  • Adventrue.cpp : 冒险模式类文件
  • Forest.cpp : 冒险模式-森林系列类实现文件
  • Dungeon.cpp : 冒险模式-地牢系列类实现文件
  • Infernal.cpp : 冒险模式-地狱系列类实现文件
  • Help.cpp : 帮助信息类实现文件
  • Other.cpp : 刷新界面、放置按钮、输出对话框类实现文件

包含算法

  • 森林系列:Prim 算法
  • 地牢系列:图论 DFS 算法
  • 地狱系列:暴力 DFS 算法

算法说明

以下对这些算法给出简单说明,详细请自行学习(比较有难度):

...

FlipGame

FlipGame,又名点灯游戏,是一个十分有趣的智力游戏:有一行 N 行 N 列的灯,开始时全部是灭的,当你点击其中一盏灯时他的上下左右(若存在的话)状态全部改变,现在要求你以最少地步数,将全部的灯点亮。
此处使用了 8 x 8 的方格,其亮灭状态使用一个 8 字节变量按位记录,点亮状态使用了图片作为背景。

执行效果如下:

项目使用 VS2017 编译,图片内嵌到了资源文件中,并设置了应用图标。

Git项目地址:https://github.com/thatboy-zero/FlipGame8x8

兰顿蚂蚁

受到生命游戏启发,想到了这个兰顿蚂蚁,都是零玩家游戏。

在平面上的正方形格被填上黑色或白色。在其中一格正方形有一只“蚂蚁”,它的头部朝向上下左右其中一方。
若蚂蚁在白格,右转90度,将该格改为黑格,向前移一步;
若蚂蚁在黑格,左转90度,将该格改为白格,向前移一步。

以上就是兰顿蚂蚁的简单规则描述。更详细的请参考维基百科。

执行效果如下:

完整的源代码如下:

/******************************
 * 兰顿蚂蚁
 * 编译环境:VC++ 2017
 * 作者:that boy,2018/12/19
 * 最后修改:2018/12/21
 ******************************/

#include <EasyX.h>
#include <string>
#include <conio.h&
...