第11章 樱花树

童晶老师《C和C++游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。

本章我们将绘制一些漂亮的樱花树,如图所示。鼠标位置设定樱花树的高度和分散程度,鼠标右键点击设置是否显示过程动画,鼠标左键点击开始绘制。

首先学习递归的概念,实现汉诺塔问题的求解;然后学习分形的概念,并利用递归调用绘制一棵分形树;最后修改分形树的生成与绘制参数,实现了随机樱花树的绘制。

源码:

#include <graphics.h>  
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#define  PI 3.1415926
#define  WIDTH 800   // 画面宽度
#define  HEIGHT 600  // 画面高度度

float offsetAngle = PI/6; // 
...

第10章 十字消除

童晶老师《C和C++游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。

本章我们将编写十字消除游戏,用户点击空白方块,沿其上下左右方向寻找第一个彩色方块,如果有两个或两个以上颜色一致,就将其消除。在进度条时间结束前消除足够的方块,可以进入下一关,效果如图所示。

首先实现随机颜色方块的表示与绘制,鼠标点击与十字消除算法;然后绘制了提示框,绘制倒计时进度条;接着进行了得分计算、胜负判断、多关卡功能的开发;学习了地址与指针的概念,并利用地址传递使得程序更加模块化;最后学习了指针和数组的知识,应用动态数组实现了游戏尺寸的动态大小调整。

源码:

#include <graphics.h>  
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

# define BlockSize 4
...

第9章 推箱子

童晶老师《C和C++游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。

本章我们将编写推箱子游戏,玩家键盘控制游戏角色将所有黄色箱子推到白色方块处,效果如图所示。

首先学习字符串与字符数组的概念,并应用字符数组初始化关卡数据;然后利用键盘控制游戏角色移动,实现地图元素更新和游戏胜利的判断;接着利用三维字符数组,实现多关卡的游戏;最后学习基于文件的关卡数据读取,利用枚举类型改进游戏代码。

源码:

#include <graphics.h>  
#include <conio.h>
#include <stdio.h>
#define B_SIZE 60 // 方块大小
#define B_NUM 8 // 方块个数,一共8*8个方块

struct Player // 结构体,用于记录玩家位置
{
	int i;
	int j;
};
Player player; // 玩家全局变量

enum E
...

第8章 十步万度

童晶老师《C和C++游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。

本章我们将编写十步万度游戏,效果如图所示。鼠标点击任意一个小圆圈,其指针顺时针旋转90度,后续被指向的圆圈指针也依次旋转,所有圆圈的旋转度数累积。玩家点击10次,尝试得到尽量高的旋转度数。

首先学习结构体的概念,并利用结构体数组存储所有小圆圈信息;然后学习鼠标交互的方法,实现鼠标点中小圆圈的旋转;接着学习数组作为函数的参数,实现旋转的迭代传播;最后进行操作步数、旋转度数的统计与显示。

源码:

#include <graphics.h>  
#include <conio.h>
#include <math.h>
#define PI 3.14159 // PI宏定义

struct Round // 定义结构体,用来表示带角度指示的小圆圈
{
	float x,y; // 小圆的圆心坐标
	float r; // 小圆半径
	
...

第7章 贪吃蛇

童晶老师《C和C++游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。

本章我们将编写贪吃蛇游戏,效果如图所示。键盘控制小蛇上下左右移动,吃到食物后长度加一;蛇头碰到自身或窗口边缘,游戏失败。

首先利用全局变量和函数的知识,设计了一个游戏开发框架;然后学习二维数组的知识,构造了地图和小蛇,实现了小蛇向四个方向移动;接着学习了静态变量的概念,进行了时间控制的改进;最后实现了失败判断与显示、吃食物增加长度的功能。

源码:

#include <graphics.h>  
#include <conio.h>
#include <stdio.h>
#define BLOCK_SIZE 20 // 每个小格子的长宽大小 
#define HEIGHT 30 // 高度上一共30个小格子
#define WIDTH 40 //  宽度上一共40个小格子 

// 全局变量定义
int Blocks[HEIGH
...

第6章 见缝插圆

童晶老师《C和C++游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。

本章我们将绘制一些漂亮的随机图案,如图所示,随机生成的圆互不相交且尽量填满画布,按空格键可以切换不同的绘制模式。

首先利用数组实现多个圆的生成和绘制,并使得圆和圆之间不相交;然后学习函数的概念,并应用函数改进代码,添加了新圆半径最大化的功能;最后利用函数封装了多种绘制模式,并通过键盘按键进行互动。

  

 

源码:

#include <graphics.h>  
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <math.h>

// 求解两个点之间的距离
float Dist2Points(float x1,float 
...

第5章 见缝插针

童晶老师《C和C++游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。

本章我们将实现一个见缝插针的游戏。按下空格键后发射一根针到圆盘上,所有针逆时针方向转动;如果新发射的针碰到已有的针,游戏结束。

首先进行了圆盘与针的绘制,利用三角函数实现了针的旋转;然后学习了一维数组的概念,并利用数组实现了多根针的效果;利用批量绘制函数改进了绘制效果;最后实现了针的发射与增加、游戏失败判断、得分与显示效果的改进。

源码:

#include <graphics.h>  
#include <conio.h>
#include <stdio.h>
#include <math.h>
int main()
{
	const float Pi = 3.1415926; // Pi常量
	int width = 800; // 画面宽度
	int height = 600; // 画面高度
	initgra
...

第4章 旋转蛇

童晶老师《C和C++游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。

本章我们将绘制非常神奇的错觉图片,静止的圆盘看起来却有在转动的错觉。

首先学习绘制扇形函数和RGB颜色模型,绘制了一个基本单元;然后学习了for循环语句和循环的嵌套,实现了旋转蛇的绘制;最后学习了HSV颜色模型,并利用随机函数和按键切换,实现了丰富多变的旋转蛇错觉图案。

源码:

#include <graphics.h>  
#include <conio.h>
#include <stdio.h>
#include <time.h> 
int main()
{
	float Pi = 3.14159;  // 圆周率Pi
	initgraph(800,600); // 打开一个窗口
	setbkcolor(RGB(128,128,128)); // 设置背景颜色为灰色
	cleard
...

第3章 别碰白块

童晶老师《C 和 C++ 游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。

本章我们将实现一个小球跳跃躲避方块的游戏。

首先学习字符的知识,按空格键控制小球起跳;然后学习矩形的绘制,利用逻辑运算符实现小球和方块的碰撞判断;接着学习整除、取余、类型转换,利用随机数增加游戏的趣味性;最后实现得分的计算显示、解决小球在空中起跳的问题。

源码:

#include <graphics.h>  
#include <conio.h>
#include <stdio.h>
int main()
{
	float width,height,gravity; // 游戏画面大小、重力加速度
	float ball_x,ball_y,ball_vy,radius; // 小球圆心坐标、y方向速度、半径大小
	float rect_left_x,rect_top_y,rect_width
...

第2章 自由落体的小球

说明

童晶老师《C 和 C++ 游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。

本章我们将实现小球受重力影响加速下落,碰到地面后反弹的效果,如图所示。

首先学习 EasyX 图形库的下载安装,显示一个静止小球;学习整数常量的知识,并绘制多个小球;接着学习整型变量的定义和使用,从而方便修改小球坐标;然后学习 while(1) 循环和if语句,实现小球下落和反弹;最后学习浮点型变量,实现小球受重力加速下落的效果。

源码

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

int main()
{
	float y = 100;				// 小球的 y 坐标
	float vy = 0;				// 小球 y 方向速度
	float g = 0.5;				// 小球加速度,y 方向
	initgraph(600, 600)
...

关于 EasyX 的各种教程、实体书籍等学习资源推荐

每个人的学习方式不同,有些同学喜欢看帮助文档学习,有些同学喜欢看书籍教程学习,还有些学生喜欢阅读别人的源代码学习。以下收录了关于 EasyX 的各种学习资源,如果有更好的学习资源推荐,请到 C 语言革命 QQ 群 私信群主,然后我把大家的推荐汇总起来整理到这里。

喜欢阅读帮助文档的同学,看这里: https://docs.easyx.cn

喜欢阅读源代码的同学,看这里: https://codebus.cn

喜欢看在线教程的同学,看这里:https://codeabc.cn/bestans/a/concise-lesson-0

喜欢看实例教程的同学,推荐看童晶老师的知乎号,里面有非常多的游戏实例教程:https://www.zhihu.com/people/tongjingHHU

喜欢看纸质书籍的同学,推荐看童晶老师的书《C语言课程设计与游戏开发实践教程》,各大高校的图书馆应该都可以找到,淘宝也有许多店家在卖。

...

3D图形学知识汇编

更新,我把代码做了轻微的修改(20行左右)编译成了wasm,可以直接在浏览器中执行,效果还不错,有兴趣的同学可以尝试一下:点我测试

前言

3D 图形学入门文档已经基本完成,包含了完整的渲染流程和详细的数学推导,帮助同学们理解代码为什么这么编写

这是真正的图形学教程,不是 DirectX / OpenGL 使用手册。

在这个教程里,所有的一切,都从画点开始(基于 EasyX),然后一步步构建出复杂的 3D 效果,纯 CPU 渲染,效果如下:

本教程共分为三部分

在第一部分中,我们先学习2D图像绘制的一些相关知识,我们将会学习最基础最核心的知识:在屏幕上绘制图案。只有能在屏幕上绘制图案,我们才能在3D的世界遨游。

在第二部分中,我们将会进入3D的世界,尽情的畅游。

在第三部分中,我们将对前面章节所做出的渲染器进行功能扩展,使其使用起来更加的方便。本部分将会模仿OpenGL的渲染管线来扩充我们渲染器的功能,实现VBO、顺时针逆时针三

...

安装及配置 VC2010 的详细步骤

概述

Visual Studio(简称 VS)是宇宙最强大的编译器,没有之一。Visual C++(简称 VC)是 VS 里面的 C/C++ 开发环境,VC2010 学习版(也就是 Express 版)也是当前计算机二级考试 C 语言的官方指定考试环境,不像 VC6 那么过时,也不像 VC2019 那么体积庞大功能繁杂,非常适合初学者使用。

学习编程的过程中,英文是躲不开的。为了能尽早的熟悉英文环境,建议安装英文版的开发环境。因此,本文的安装步骤都是以 VC2010 Express 英文版进行讲解的。如果确实需要使用中文版,请自行翻译对照。

VC2010 Express 的中文名称为 VC2010 学习版,在本文中不再加以区分两者。

安装及配置 VC2010 Express 的步骤概述:

  1. 安装 Visual C++ 2010 Expres
...

正确的提问方式

网络是一个很好的交流学习平台,但是有些同学比较郁闷:为什么自己在网上发的问题没人帮自己呢?这多半原因是因为这些同学“不会提问”。网上关于“学习怎样提问”的文章很多,这里以 C 语言编程的问题为例,简明扼要的说一下重点:

1. 别人对你的环境一无所知。

不要想当然的认为别人应该知道什么。比如,你的 C 语言开发环境是什么?操作系统是什么?这是书上的例题还是你自己写的代码还是你从网上随便找来的代码?环境不同,细节不同,或许对你的问题多少有点影响。

2. 别人不知道你的题目是什么

有些同学上来就发一堆代码,然后问“为什么错了”。这种问题通常都没人理。不要觉得别人看了你的代码就知道你的题目是什么,很多时候,不知道题目是什么就看不懂代码。所以如果你的问题是某个题目相关的,请简明的描述一下。编译如果有错误,请贴出来编译的错误信息;执行如果有错,请描述怎样操作执行以及会产生怎样的错误。

3.&n

...

学习 C/C++ 语言的常用开发工具下载

学习编程首先需要安装一款编译器。但是目前的网络环境,很多网站下载到的编译器都被捆绑了各种广告插件,甚至木马病毒,困扰了很多初学者。本页面列出来的各种编译器及下载地址,我都亲自测试过,确保无毒无害无恶意广告插件,请放心下载。ps:如果某个资源无效了,请针对本文发表评论,我会收到提醒。

如果你是初学者不知道选择哪个,相信我,选择 VC2010 学习版就挺好。不要听信某些人说 Linux 更适合学编程什么的鬼话,也别信什么 Code::Blocks 可以跨平台的噱头。学编程就是学编程,学会了编程再说系统或跨平台的问题,不要在初学的时候就把很多问题混在一起,会打击到自己的。

Microsoft Visual C++ 2010 学习版(推荐)

简称 VC2010。目前 VC2010 是计算机二级考试的官方指定上机环境。作为学习工具,VC2010 是免费的,足够好用,并且体积不大,安装简单,推荐使用。安装完 VC2010 后,建议打上 SP1 补丁包。

VC2010 下载地址:https://appzip.cn/

...