CosmoRun - 宇宙漫步 金牌收录

说明

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

游戏截图

代码概况

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

编译环境:VS2010及以上

代码行数:1800+

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

源文件和类说明

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

用多个圆形组合形成的心形图案 铜牌收录

这个程序在很多书上都有写过,以下是运行效果截图:

代码如下:

// 程序名称:圆形组合而成的心形图案
// 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版
// 最后更新:2010-10-28
//
#include <graphics.h>
#include <conio.h>
#include <math.h>

#define	PI	3.1415926536

void main()
{
	int x, y, y1, r = 50, r1;

	// 初始化图形模式
	initgraph(640, 480);
	// 设置原点为屏幕中央
	setorigin(320, 240);
	// 设置绘图颜色为红色
	setcolor(RED);

	// 用数学方法,用多个圆形组合形成心形图案
	y1 = 240 - r;
	for(double a = 0; a < 2 * PI; a += PI / 18)
	{
...

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++) 铜牌收录

游戏说明

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

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

按键说明

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

状态栏说明

  • 生命状态:贪吃蛇是否存活,由于没有设置死亡,所以只有存活和濒死两种状态
  • 等级:每吃 10 个食物升一级
  • 分数:每个食物 10 分
  • 速度:默认速度 0 ,可以调节,最快 10,最慢 -10
  • 长度:贪吃蛇的节数(包括头)
  • 食物数量:界面中的食物个数,最大 99 ,可以手动调整
...

大球吃小球 铜牌收录

一、简介

大球吃小球,模拟自小游戏,左键按下状态拖动小球进行移动,躲避大球的同时尽量多吃小球。

玩法简单,程序也简单。开始界面按下左键开始游戏,按下右键退出程序。

新生球保护期:在 500ms 后可以被玩家吃到,在 800ms 后可以击杀玩家。

相同大小的小球碰撞时判断玩家失败。

二、游戏截图

三、游戏源码

/*
	程序名称:
			大球吃小球
	简介:
			模拟小游戏,左键按下状态拖动小球进行移动,躲避大球的同时尽量多吃小球
	环境:
			VS2019 + EasyX_20210115(beta)
	时间:
			2021.2.4
	作者:
			Teternity(QQ:1926594835)
	版权:
			作者原创,无抄袭,不涉及版权问题,仅用作学习
*/


/* ---------------头文件--------------- */
#include <iostream>
...

双人击球游戏 铜牌收录

游戏说明

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();

	setfillcolor(BLACK);
	se
...

使用 _getch() 获得方向键和更多的功能键 铜牌收录

通常来说,_getch() 可以返回用户键入的字符。对于一些小游戏,希望用方向键控制的时候,怎么做呢?

先看看 MSDN 的解释:

When reading a function key or an arrow key, _getch and _getche must be called twice; the first call returns 0 or 0xE0, and the second call returns the actual key code.

简单来说,当 _getch() 返回 0 或 0xE0 时,就表示用户按了功能键,这时候需要再调用一次 _getch(),第二次 _getch() 返回的值表示功能键的键码,比如:

  • 72 表示 上
  • 80 表示 下
  • 75 表示 左
  • 77 表示 右

更多的键码,可以自己试验得出。

具体到程序中的应用,请参考“俄罗斯方块”的源代码:https://codebus.

...

视觉错觉艺术 铜牌收录

这是网上经常见的视觉错觉艺术图片,可以用程序生成的。效果如下:

完整的源代码如下:

///////////////////////////////////////////////////
// 程序名称:视觉错觉艺术图
// 编译环境:VS2010, EasyX_20200902
// 作  者:温良
// 最后修改:2021-1-24
//
#include <graphics.h> 
#include <conio.h>

const double PI = 3.1415926536;

int main()
{ 
	// 创建绘图窗口
	initgraph(800, 560);

	// 使用青绿色填充背景
	setbkcolor(RGB(185, 230, 0));
	cleardevice();

	double b = 0;

	for(int x = 20; x < 760; x += 48, b -= PI)
	{
		for(int
...

见缝插针 铜牌收录

游戏说明

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

亮点

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

期待

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

效果图

代码

///////////////////////////////////////////////////
// 程序名称:见缝插针
// 编译环境:Mictosoft Visual Stu
...

初学者必读:讲解 VC 下如何正确的创建、管理及发布项目 银牌收录

本文讲解 Visual C++ 的项目文件组成,以及如何正确的创建及管理项目。

本文所设计的内容是初学者必须要掌握的。不能正确的管理项目,就不能进一步写有规模的程序。

一、项目下各种常见文件类型的功能

1. 代码文件

扩展名为 .cpp、.c、.h 等。

通常情况下,项目会由多个代码文件和头文件组成,每个文件实现不同的功能。

2. 资源文件

扩展名为 .rc 。

资源文件中定义了项目中所需的各种资源,例如图片、图标、对话框、声音等。项目中的资源引用情况均会记录在其中。有些资源会完整的记录在 .rc 里面,有些资源仅仅在 .rc 里面记录一个链接。

3. 项目管理文件

扩展名在不同版本的 VC 下有区别:VC6 为 .dsp,VC2008 / VC2010 为 .vcproj,VC2012 为 .vcxproj 。

项目管理文件管理所有代码、资源文件以及项目设置。

4. 工作区管理文件

...

挑战六秒 铜牌收录

挑战六秒的说明

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

程序编写过程

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

...

星空 铜牌收录

该程序是 EasyX 帮助中的范例程序。

// 程序名称:星空
// 编译环境:Visual C++ 6.0,EasyX_20200902
// 最后更新:2009-2-22
//
#include <graphics.h>
#include <time.h>
#include <conio.h>

#define MAXSTAR 200	// 星星总数

struct STAR
{
	double x;
	int y;
	double step;
	int color;
};

STAR star[MAXSTAR];

// 初始化星星
void InitStar(int i)
{
	star[i].x = 0;
	star[i].y = rand() % 480;
	star[i].step = (rand() % 5000) / 1000.0 + 1;
	star[i].color = (int)(star[i].step * 255 / 6.0 + 0.5);	//
...

字符阵程序 铜牌收录

该程序是 EasyX 帮助中的范例程序。

// 程序名称:字符阵
// 编译环境:Visual C++ 6.0 / 2010,EasyX_20200902
// 发布日期:2009-2-22
//
#include <graphics.h>
#include <time.h>
#include <conio.h>

int main()
{
	// 设置随机函数种子
	srand((unsigned)time(NULL));

	// 初始化图形模式
	initgraph(640, 480);

	int x, y;
	TCHAR c;

	settextstyle(16, 8, _T("Courier"));	// 设置文字样式
	settextcolor(GREEN);				// 设置文字颜色
	setlinecolor(BLACK);				// 设置画线颜色

	while (!_kbhit())
	{
		for (int i = 0; i 
...

彩虹 铜牌收录

该程序是 EasyX 帮助中带的范例程序。

执行效果如下:

完整源代码如下:

// 程序名称:彩虹
// 编译环境:Visual C++ 6.0,EasyX_20200902
// 最后更新:2010-8-25
//
#include <graphics.h>
#include <conio.h>

int main()
{
	float H, S, L;

	initgraph(640, 480);

	// 画渐变的天空(通过亮度逐渐增加)
	H = 190;	// 色相
	S = 1;		// 饱和度
	L = 0.7f;	// 亮度
	for(int y = 0; y < 480; y++)
	{
		L += 0.0005f;
		setlinecolor( HSLtoRGB(H, S, L) );
		line(0, y, 639, y);
	}

	// 画彩虹(通过色相逐渐增加)
	H = 0;
	S = 1;
	L =
...

打字母游戏 铜牌收录

某天突然来兴趣了,就写了这么个打字母的小程序,就是以前学习机上那种字母往下掉,然后按相应键字母消失的游戏。

程序不长,尤其很大篇幅都是开始和结束的文字绘制,除去这些没几行代码了,感觉做个范例还是很有用的。

又补了个小特效,加了点注释,凑了整 100 行~

////////////////////////////////////////////
// 程序名称:打字母游戏
// 编译环境:Visual C++ 6.0 / 2010,EasyX_20200902
// 程序编写:yangw80 <yw80@qq.com>
// 发布日期:2010-8-26
//
#include <graphics.h>
#include <conio.h>
#include <time.h>

// 欢迎界面
void welcome()
{
	// 输出屏幕提示
	cleardevice();
	settextcolor(YELLOW);
	sett
...