概述

一直在学习C++,深感学习一门语言必须得下手实践,因此在网上找了很多小项目,但好多有都不感兴趣坚持不下来。近期突然发现河海大学童晶老师的书,是专门讲编写C++小游戏的例子,很感兴趣。我根据该书的例子然后也根据自己对C++的理解,尽量以新的方式重新实现。能力有限写的不好,大家可以自己优化。
另外需要说明的是,这些例子用到了EasyX图形库,自认为这个图形库是亮点童晶老师的书最大的亮点,它是针对 C/C++ 的图形库,最大的好处是效果可视化,大大降低了直接用C++实现图形的难度,也增加了趣味性和成就感。网址在这里:https://easyx.cn/。直接下载安装就可以。

开始前说几个用的多的快捷键:
选中需要注释的代码段,按Ctrl + K + C 即可快速注释;
选中需要取消注释的代码段,按Ctrl + K + U 即可取消注释。

实现效果和涉及的知识

本例子我们将模拟物理小球的运动的场景。
例子中我们会学习EasyX图形库函数、类、头文件和源文件、全局变量等。

文件结构


比较好的文件结构是:
为每一个模块都编写一个.c文件,一个.h文件。
.c文件:函数的定义,全局变量的定义,全局结构体变量的定义。
.h文件:函数的声明,全局变量的声明(extern),全局结构体的定义,全局结构体变量的声明。
然后main.c文件直接包含.h头文件即可。

具体代码

代码中有注释,可供参考。

FQF_CPP.cpp

// FQF_CPP.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。#include <iostream> // C++ STL 输入输出库
#include <graphics.h> // C++图形库(EasyX)
#include <conio.h> // console input/output:非cpp STL,定义了通过控制台进行输入输出的函数,如getch()
#include <stdio.h> // standard input&output:标准输入输出头文件,如scanf, printf
#include "ballXY.h" // 计算小球圆心坐标的头文件
#include "ifcollision.h" // 判断小球与边界碰撞的头文件
#include "data.h" // 全局变量using namespace std;int main()
{ballXY ballxy;ballxy.set_ballenvi(A, B, R, G, a, Tstep);initgraph(A, B);Sleep(1000);ballxy.cal_ballxy(X, Y, VX, VY);fillcircle(X, Y, R);Sleep(1000);while (1){cleardevice();float x = ballxy.get_ball_x();float y = ballxy.get_ball_y();float vx = ballxy.get_ball_vx();float vy = ballxy.get_ball_vy();fillcircle(x, y, R);Sleep(20); // 延迟20ms,非标准库函数ballxy.cal_ballxy(x, y, vx, vy);}//_getch(); // Get a character from the consoleclosegraph();return 0;
}

ballXY.h

#pragma once
#ifndef BALLXY_H_
#define BALLXY_H_class ballXY
{private:float A, B, R, G, a;float x, y, vx, vy;float Tstep;public:ballXY();~ballXY();void set_ballenvi(float W, float H, float r, float g, float f, float Tstep);void cal_ballxy(float X, float Y, float Vx, float Vy);float get_ball_x();float get_ball_y();float get_ball_vx();float get_ball_vy();
};#endif // !BALLXY_H_

ballXY.c

#include "ballXY.h"
#include "ifcollision.h"
#include <math.h>
#include "data.h"ballXY::ballXY()
{x = 0, y = 0, vx = 0, vy = 0; // 不要float是赋值,加了就是定义
}ballXY::~ballXY()
{}void ballXY::set_ballenvi(float W, float H, float r, float g, float f, float tstep)
{A = W;B = H;R = r;G = g;a = f;Tstep = tstep;
}void ballXY::cal_ballxy(float X, float Y, float Vx, float Vy)
{int ifcoll = ifcollision(X, Y, R, A, B);switch (ifcoll){case 0:vx = Vx * a;vy = (Vy + G * Tstep) * a;x = X + vx * Tstep;y = Y + vy * Tstep;break;case 1:vx = Vx * a;vy = -1 * vy * a;x = X + vx * Tstep;y = Y + vy * Tstep;if (y< R){y = R;}break;case 2:vx = Vx * a*0.97;vy = -1 * vy * a * 0.85;x = X + vx * Tstep;y = Y + vy * Tstep;if (y > B - R){y = B - R;}if (y > B - R - 2 && fabs(vy) < 1.04){vy = 0;y = y = B - R;}if (y > B - R - 2 && fabs(vy) < 1.04 && vx < 0.001){//vx = 0;}break;case 3:vx = -vx * a;vy = (Vy + G * Tstep) * a;x = X + vx * Tstep;y = Y + vy * Tstep;if (x < 0){x = 0;}break;case 4:vx = -vx * a;vy = (Vy + G * Tstep) * a;x = X + vx * Tstep;y = Y + vy * Tstep;if (x > A - R){x = A - R;}break;default:break;}/*if (fabs(Vx) <= 0.1){vx = 0;}if (y > B - R - 0.5 && fabs(Vy) <= 0.05){vy = 0;}*/
}float ballXY::get_ball_x()
{return x;
}float ballXY::get_ball_y()
{return y;
}float ballXY::get_ball_vx()
{return vx;
}float ballXY::get_ball_vy()
{return vy;
}

ifcollsion.h

#pragma once
#ifndef IFCOLLISION_H_
#define IFCOLLISION_H_extern int ifcollision(float X, float Y, float r, float A, float B);#endif // !1

ifcollsion.cpp

#include "ifcollision.h"int ifcollision(float X, float Y, float r, float A, float B)
{int ifcoll = 0;if (Y - r <= 0){ifcoll = 1;};if (Y + r >= B){ifcoll = 2;};if (X - r <= 0){ifcoll = 3;};if (X + r >= A){ifcoll = 4;}return ifcoll;
}

data.h

#pragma once#ifndef DATA_H_
#define DATA_H_extern float A, B, R, G, a, Tstep;
extern float X, Y, VX, VY;#endif // !DATA_H_

data.cpp

// 全局变量float A = 400, B = 600, R = 10, G = 9.8, a = 0.99, Tstep = 0.4;
float X = 150, Y = 450, VX = 100, VY = -200;

C++练手小游戏1——模拟物理小球的运动相关推荐

  1. python练手小游戏_Python小游戏练手EMS员工项目自学者练习

    Python小游戏练手EMS员工项目自学者练习 # 显示欢迎信息 from typing import Any, Union print('-' * 20, '欢迎使用员工管理系统', '-' * 2 ...

  2. Java练手小游戏---黄金矿工

    你玩过4399曾经最火的黄金矿工小游戏吗,黄金矿工小游戏是一款休闲娱乐的一个挖宝游戏,在游戏中地下会有许多的宝藏,你得想办法把它们都挖出来,作为矿工的你,对你来说是轻车熟路的,能不能挖到宝,看你抓取的 ...

  3. Python3三个简单练手小游戏

    学Python之前我们先来几个简单的小游戏练练手,这三个小游戏一个比一个复杂,建议新手慢慢来: 1.猜拳: import random #导入随机模块num = 1 yin_num = 0 shu_n ...

  4. python小游戏代码 py_教自己学Python(三)练手小游戏:不

    不要猜中的小游戏 背景 和朋友闲待着两个人无聊,都想吃苹果又都不想洗,想起玩过的一个酒桌上猜数字的游戏,然后在手机上写了出来,三局两胜输了去洗苹果-- 游戏介绍 零到99(包括边界),随机一个数两人( ...

  5. 【CTF】某xss练手小游戏

    http://test.xss.tv 1.http://47.94.13.75/test/level1.php?name=test 直接插入即可,如: http://47.94.13.75/test/ ...

  6. ssm练手小项目_20 个 JavaScript+Html+CSS 练手的小项目

    前言: 最近在 GitHub 上发现了一个 vanillawebprojects[1] 开源仓库,里面收集了 20 个 JavaScript+Html+CSS的练手项目,没有使用任何框架,可以让你从基 ...

  7. html+css+js之20个练手小项目(一)

    html+css+js之20个练手小项目(一)--Hangman 前言 一.HTML 二.CSS 三.JS 前言 前端新手练习,记录不迷失. 主要练习html和CSS布局以及JS. 来源github, ...

  8. 练手小项目,爬取3DM图片

    博客原文:https://weweweha.com 1. 概述 ​ 爬取3DM指定网页的游戏壁纸,并且通过多线程来加速爬取图片的速度. 2.使用库 ​ request库用来1解析指定网页,re库用来搜 ...

  9. c语言模拟器怎么打程序,C语言初学者练手小项目——万花模拟器

    原标题:C语言初学者练手小项目--万花模拟器 还记得小时候玩的万花尺么?好好玩,各种不同的点距能画出各种各样形状图形. C语言程序万花尺模拟 函数功能:每隔5秒随机生成万花图形 并自动保存作图参数以及 ...

最新文章

  1. Django web框架
  2. 求1到30的阶乘和(Java)
  3. SAP EWM 性能优化(一)
  4. 谢烟客---------Linux之Bash基础特性(2)
  5. Object.defineProperty()方法的用法详解
  6. tomcat启动完成执行 某个方法 定时任务(Spring)
  7. Ubuntu12.04安装配置Theano
  8. 添加softmax层_PyTorch入门之100行代码实现softmax回归分类
  9. python读取文件夹下特定的文件_python os模块获取指定文件夹下所有文件名
  10. rsync 远程同步——安全高效的异地备份策略
  11. 掩码 项目编码_每天进行20天的编码项目
  12. mysql日志查询指令_MySQL查询日志总结
  13. 11g cursor_sharing 参数说明
  14. CentOS6.5安装教程
  15. 斗地主服务器维护中,天天斗地主游戏问题解决方法
  16. 2023CAEE安规测试与环境试验技术设备展览会
  17. 用vlc搭建rtsp流媒体服务器
  18. unity之小地图和聊天室
  19. axure能做剪切蒙版吗_二手车销售好做吗?没经验能做二手销售吗?
  20. 计算机共享在哪里找,电脑共享文件在哪里找

热门文章

  1. 微软Tech Summit 2017,微软携手Unity打造MR之夜
  2. 数字游戏(区间dp)
  3. ViewDragHelper (三)- 打造仿陌陌视频播放页(深入篇)
  4. C# WinfForm 控件之dev电子表格 SpreadSheet
  5. android10续航,全天候在线无负担,中兴天机10 Pro续航测试
  6. Linux SCSI LOG打印等级
  7. WPF实现LED数字效果展示
  8. 2018年最好用的5个python网站开发框架
  9. jupyter 更换主题
  10. 网页篡改应急响应指南