代码分享

================

CosmoRun - 宇宙漫步

说明

CosmoRun是NoSixFive游戏工作室发布在Windows应用商店的一款魔性小游戏,觉得特别好玩所以仿做了一个。它的操作十分简单,点击鼠标可以让小球转向,控制小球在一个方块组成的世界中漫游~

游戏截图

代码概况

仓库地址:https://github.com/Nomango/CosmoRun-EasyX

编译环境:VS2010及以上

代码行数:1800+

由于这个游戏是16年4月份写的,当时我对游戏框架并不了解,完全按照自己的想法进行设计,注释写的很少,还有特别多的数字计算,所以代码阅读起来非常困难,尤其是Floor这个类,随机创建地板的算法复(hun)杂(luan)到我自己都不想再看见它…

源文件和类说明

main.cpp:
主函数,程序入口。创建了一个GameUI对象,运行StartUI函数进入游戏界面。

GameAfx.h
包含了所有头文件,并对游戏中的常量


...

Pixel Puzzles

Pixel Puzzles是一种逻辑游戏,以猜谜的方式绘画位图。在一个网格中,每一行和列都有一组数,玩家需根据它们来填满或留空格子,最后就可以由此得出一幅图画。例如,“4 8 3”的意思就是指该行或列上有三条独立的线,分别占了4、8和3格,而每条线最少要由一个空格分开。传统上,玩家是以黑色填满格子,和以“×”号标记一定不需要填充的格子。就此来看,这和踩地雷十分相似。但跟踩地雷不同的是,即使填错了格子,也不会即时出局。Pixel Puzzles是一个NP完全的问题。 Pixel Puzzles是在1987年由日本人西尾彻也发明的。在日本,Pixel Puzzles的名称是“お絵かきロジック”,意思是“绘画逻辑”。Pixel Puzzles初见于日本的谜题杂志,玩家用纸和笔来玩。

益智小游戏:交叉线

这是用 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 : 
...

围住神经猫游戏

一.游戏说明

本游戏仿造4399的小游戏-围住神经猫,游戏地址:4399围住神经猫游戏

游戏操作:通过鼠标点击操作,设置路障,围住神经猫,当成功围住神经猫时,游戏胜利。当神经猫逃离地图边缘,游戏失败。

二.游戏截图

三.实现思路

1. 地图还原:

首先是游戏的道路,这里我们采用绘制灰白色的圆来表示可走的路,用黄色的圆来表示已存在的障碍物。同时还需要注意奇偶行需要交错排列。

2. 猪的移动:

这里我们采用广度优先搜索求最短路径。"猪"在一个位置,能够移动的方向有6个,需要注意的是:

由于奇偶行交替排列,导致奇偶行猫的可行路径是不一样的,奇数行:上,下,左,右,左下, 左上。

偶数行:上,下,左,右,右下,右上。剩下的就是常规的求最短路径即可。

四.完整代码

...

弹幕躲避游戏

游戏说明

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

...

诺基亚经典贪吃蛇

纯代码实现的经典贪吃蛇。相信贪吃蛇是不少人儿时的美好记忆。诺基亚的像素版贪吃蛇,曾经风靡一时。今天,我用 EasyX 实现了它。操作方法:可通过 wasd 或上下左右键控制蛇的移动;通过食物的成员函数 color 将吃掉食物后增加的节颜色设定为吃掉食物的颜色;每得 500 分,增加一个食物,但食物总数不超过 10 个;撞墙或撞到自己即为死亡。这是本人第一次发表代码,且本人为初中生,如有可改进之处欢迎提出建议!

老年贪吃蛇游戏

游戏说明

         这是一个用来模拟老年机上贪吃蛇游戏的游戏,简谱的画面希望能够给大家带来童年的回忆。当然,难度自然会比老年机上的游戏难一些,希望大家做好准备,开始游戏吧!

        作者信息:邮箱 mzh1772@163.com,2007 年出生,有错误欢迎提出。

操作方法

        按方向键控制蛇的方向,ESC 键暂停游戏,吃到一个食物加 1 分,碰到墙壁或蛇自己结束游戏。

运行截图

游戏源码

/*
	名称:  老年贪吃蛇
	作者:  梅朱赫(QQ:3406077232)
	环境:  Vs2019-C++空项目模板-32位
	拓展包:EasyX_20200315(beta)
	时间:  20
...

90%还原南宫梦吃豆人

MyPacman 作者 bridgeL

开发软件:VS2019

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

本文对应版本v1.4.7

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

游戏运行画面展示

核心框架概述

类图/设计流图

类关系

CMover 派生

CMonster 
CPacman 

CFlash 容器

CFla




...

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

基于 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 算法

算法说明

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

...

炸金花小游戏

纯代码实现的一个简单的炸金花的小游戏。

市面上的炸金花似乎已经被禁,因此模拟时没有参考,或许有一些不足。

由于简单模拟,所以没有太多的动画和界面。

程序由 三个头文件 和 一个源文件 组成,便于分块管理。

一、"Cards.h"

        封装了卡牌底层,由三个类组成,单张牌类、三张牌类 和 52 张牌的类。

        有控制台的输出测试接口。

二、“CardGraph.h”

        该文件主要是进行绘图,根据扑克的底层数据进行相关绘制。

        修改:利用宽字符输出实现花色,而不是直接绘制。

        绘制卡片背面心形时,仅需两条直线和两条贝塞尔曲线即可,这里不过多说明。

...

博弈五子棋(人机对战)

基于 EasyX 的五子棋软件。

算法部分想了很久,也参考了网上的其他游戏的。原理主要就是:遍历每个空闲的点,根据下在那个点后连成的棋形来判断其分值,再选出分值最高的位置并返回给游戏函数。

还在上小学,更深层次的判定算法还没学,就先将就一下吧。

运行效果如下:

完整源代码如下:

////////////////////////////////////////////////////////
// 程序名称:博弈五子棋
// 编译环境:Visual C++ 2019		EasyX_20190529(beta)
// 作  者:陈可佳 <emil09_chen@126.com>
// 最后修改:2019-9-30
//
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <gra
...

贪吃蛇大作战

这是一个贪吃蛇大作战类游戏,修改特性为 AI 不互杀;

该程序有四个类:蛇基类 SnakeBase,玩家类 Player,AI 类,Game 类;
SnakeBase 和 AI 均继承自 SnakeBase,SnakeBase 提供基础接口;
Game 提供数据初始化以及游戏主循环。

程序设计之初,采用“实运行”方式,即所有动画均在地图 imgMap 上真实绘制,
这样却有一些严重的问题,需要不断地记录节点背景以恢复节点经过的地方等。

后修改为“虚运行”方式,判断位置是否可视后直接绘至窗口内,
这样大大降低时间开销,同时不会因为蛇靠近而产生不可擦除的颜色。

至于蛇运行,采用位置继承,即节点下一个位置为上一个节点的位置,但是会发现跨度太大,
解决办法是在这个跨度中插入适当帧数。

执行效果如下:






...

扫雷(WinXP 扫雷的高仿版)

这是个高仿的扫雷游戏,游戏手感非常贴近原版。

代码由两个类构成,基类 Graph 对 IMAGE 进行绘制,同时生成界面,初始化相关数据。MineSweeper 类继承 Graph 类,主要进行相关操作,识别按钮等做出反应。

执行效果如下:

完整的游戏源码如下:

/*
	程序名称:扫雷

	简  介:一款经典的小游戏,程序运行中可以通过 ESC 直接退出
			 左键点击,右键标记和取消标记,同时按下左右或按下中间键触发提示
			 其他操作基本和官方一致,界面略有调整,详细操作自行测试

	编译环境:VS2019 + EasyX_20190529(beta)

	编写时间:2019-6-29
	最后修改:2019-7-30

	作  者:Teternity(qq1926594835)

	版  权:作者原创,无抄袭,不涉及版权问题,仅用作学习
*/

// 头文件
#include <easyx.h>
#in
...

贪婪球 2.0(by 奶酪)

贪婪球第一版在这里:https://codebus.cn/contributor/post/greedy-ball

2.0 版本相对第一版做了如下修改:

  1. 视野缩放,会随着体积增大视野变大,解决一代玩家球过大挡住屏幕现象
  2. 增加高杀伤力毒圈,解决满地图跑问题
  3. 提高敌人 AI 智商,会主动吃食物
  4. 修复若干已知 bug
  5. 扩大了游戏区域
  6. 全部用 c++ 重写

执行效果如下:

完整的源代码如下:

///////////////////////////////////////////////////
// 程序名称:贪婪球 2.0
// 编译环境:Microsoft Visual studio 2017,EasyX 2018春分版
// 作  者:奶酪
// 邮  箱:2190038793@qq.com
//
...