代码分享

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

益智小游戏:交叉线

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

基于 MCI 播放,easyx 为界面的音乐播放器

说明

这是一个基于 MCI 播放,使用 easyx 作为界面的简单本地音乐播放器。

支持以下操作,设置音乐搜索路径(在文件中设置),播放,暂停,下一曲,上一曲,单曲循环,顺序播放(列表循环),随机播放,

设置音量大小,拖动音乐进度条(快进,快退),滚动条,展开/关闭播放列表,更换背景图等。

 介绍

这是程序打开后的界面,此时播放列表默认为隐藏状态,鼠标点击播放列表或者其旁边的小箭头,即可展开音乐播放列表

下图为正在播放音乐时的界面,可以看到,有显示播放列表,右侧有播放列表的滚动条(紫色),显示音乐播放的进度条,

音乐名,音乐播放时间和音乐总时间等

点击播放列表中的音乐名即可播放该音乐,再次点击暂停

播放列表旁边的滚动条可上下拖动,也可以在其上下方位置点击移动(拖动操作可能体验较差,建议在其上下方点击)

音乐进度条可点击,拖动达到快进/快退操作(拖动操作暂时有着明显的延迟,顿挫感,

...

射击游戏

前言

这是一篇射击类小游戏的代码。第一次写的小程序,请多包涵里面的不足。如有高见,敬请指出。

效果图

游戏说明

设计一个base类,包含基本属性。电脑和玩家类都继承自base类。还有一个子弹类。主要有三个函数,ini,show,game,分别用来初始化,显示菜单和进行游戏,功能挤在一起。
运行游戏时,用随机数产生随机种类的敌人。WASD移动,鼠标左键射击。玩家没击败一个敌人后,就会加一个得分。随着玩家得分的升高,敌人的产生概率和属性都会提升。当玩家生命值小于等于0时,此局游戏结束。结算时会根据玩家的得分获得金币,数值上等于玩家的得分,用于升级玩家的属性,且升级会很快。

/////////////////////////////////////////////////////////////
//程序名称:射击游戏
//编译环境:Visual St

...

围住神经猫游戏

一.游戏说明

本游戏仿造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	
...

猪圈密码

猪圈密码(Pigpen cipher),亦称共济会密码(英语:masonic cipher)或 共济会员密码(英语:Freemason's cipher),是一种以格子为基础的简单替代式密码。即使使用符号,也不会影响密码分析,亦可用在其它替代式的方法。

毕达哥拉斯树(Pythagoras-tree)

分形几何学是一门以不规则几何形态为研究对象的几何学。一个数学意义上分形的生成是基于一个不断迭代的方程式,即一种基于递归的反馈系统。虽然分形是一个数学构造,它们同样可以在自然界中被找到,这使得它们被划入艺术作品的范畴。

计算机协助了人们推开分形几何的大门。法国数学家曼德尔勃罗特这位计算机和数学兼通的人物,开创了新的数学分支——分形几何学。分形在医学、土力学、地震学和技术分析中都有应用。

毕达哥拉斯树(Pythagoras tree)是由毕达哥拉斯根据勾股定理所画出来的一个可以无限重复的图形。又因为重复数次后的形状好似一棵树,所以被称为毕达哥拉斯树,也叫“勾股树”。

这个程序,展示了毕达哥拉斯树的生成。执行效果如下:

我的求解思路是:

  1. 确定直线 p1-p2,并在 p1-p2 的左侧求出 p11-p22,使 p1-p2-p22-p11 构成正方形。
  2. 求出点 p,使  p-p11-p22
...

数独辅助器

数独游戏介绍

数独(shù dú)是源自 18 世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据 9×9 盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含 1-9,不重复 。

数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。

数独辅助器编写思路

首先,肯定是画九宫格,做好这个程序的界面。然后给这个界面的相应位置赋予对应相应的数,用鼠标给这个数独九宫格进行填数。当然做好前面的这些只是表面的,最主要的是如何用电脑来解这个数独呢?我一直在思考,程序其实就是一个工具,而我们就是要学会应用这个工具去做一些我们很难做到的事,编写程序就是一个解决问题的好办法。我记得我曾经花了一周的时间去解一个数独,虽然数独最终解出来了,但假如我又遇到别

...

TIN 三角网的生成

三角网的概念

三角网是由一系列连续三角形构成的网状的平面控制图形,是三角测量中布设连续三角形的两种主要扩展形式,同时向各方向扩展而构成网状,优点为点位分布均匀、各点之间互相牵制、图形强度较高,缺点是扩展较缓慢。

三角网是实现地形三维可视化,数字地面模型(Digital Terrain Model,简称 DTM)是一种很有效的途径。DTM 主要是由栅格和不规则三角网(Triangulated Irregular Network,简称 TIN )两种数据格式来表示,相比于栅格 TIN 具有许多优点,几乎能适用于任何复杂的地形,所以 TIN 是 DTM 常采用的一种格式。

三角网的特性

  1. TIN 是惟一的;
  2. 力求最佳的三角形几何形状,每个三角形尽量接近等边形状;
  3. 保证最邻近的点构成三角形,即三角形的边长之和最小;
  4. 最小角最大,即在所有的三角网中 Delaunay 三角网的最小角是相对最大的。狄洛尼三角网满足以上三个条件,其定义为 :
...

迷宫小游戏

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

包含九个文件

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

包含算法

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

算法说明

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

...

迷宫算法演示

这不是一个游戏,而是算法分享和算法演示。

通过简单绘图,使得算法的执行过程可视化。

包含两个文件:头文件 MazeAlgorithm.h 和 源文件 main.cpp。

main.cpp 给出基本控制和简单文字按钮。

MazeAlgorithm.h 给出算法的实现和演示绘图,包含算法如下:

一、迷宫生成:

        ① DFS(即深度优先)递归和非递归版本。

        ② 十字分割 递归和非递归版本。

        ③ 随机 Prim。

二、迷宫寻路:

        ① DFS(分为随机方向 和 指定优先遍历方向,是同一个接口)。

        ② A* 寻路。

这对于初学者而言或有

...