【easyx】快速入门——弹球小游戏(第一代)

目录

1.需求

2.运动的小球

3.碰到边缘反弹

4.圆周撞击或越过边界反弹

5.绘制和移动挡板

 6.小球碰到挡板反弹

7.游戏失败时该如何处理

8.随机初始条件

9.完整代码


我们这一节将结合动画和键盘交互的知识来做一个小游戏

1.需求

我们先看需求:小球在窗体内运动,撞到除了底边外的另外三个边缘就反弹一次,如果小球撞到底边,游戏结束。玩家可以控制在底边上的一个挡板,让小球撞击到挡板上而反弹,阻止小球撞到底边

2.运动的小球

这里我们先绘制好一个圆形

#include<easyx.h>
#include<stdio.h>

int main()
{
	initgraph(800, 600);
	setorigin(400, 300);
	setaspectratio(1, -1);

	setbkcolor(RGB(164, 225, 202));
	cleardevice();

	setfillcolor(WHITE);
	solidcircle(0, 0, 40);

	getchar();
	return 0;

}

接下来我们想让小球一开始就往右上方运动,也就是说它的速度和x轴的夹角是45度 

我们假设vx=5,vy=5,则

 我们再考虑一下帧率的问题

这样子,小球就可以往右上方运动了

我们看代码

#include<easyx.h>
#include<stdio.h>

int main()
{
	initgraph(800, 600);
	setorigin(400, 300);
	setaspectratio(1, -1);

	setbkcolor(RGB(164, 225, 202));
	cleardevice();

	setfillcolor(WHITE);
	solidcircle(0, 0, 40);

	int x = 0, y = 0;
	int vx = 5, vy = 5;
	int r = 40;
	while (1)
	{
		cleardevice();
		solidcircle(x, y, r);
		Sleep(40);
		x += vx;
		y +
  • 44
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
基于C++和EasyX开发的走迷宫益智小游戏源码+项目说明.zip 【项目介绍】 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 版本:V1.0 时间:2020-7-22 环境:开始使用 VS2010,后来用 VS2017 修改 简介:一个普通的迷宫小游戏 感谢:感谢 QQ 群 C语言革命7 全体成员为该项目的开发做了巨大的贡献,没有你们,该作品也不能有现在的情况! 版权:作者原创,无抄袭,不涉及版权问题,仅用作学习、娱乐,欢迎各位fork! ### 玩法: ~~~cpp 游戏开始选择系列关卡 有三种系列: 森林(简单,基于 Prim 算法) 地牢(中等,基于图论 DFS 算法) 地狱(困难,基于暴力 DFS 算法) 选择系列后,进入游戏 WSAD 上下左右,游戏中有计时器 ~~~ ### 文件: ~~~cpp Maze.h : 初始化头文件 Maze.cpp : 程序开端文件 Game.h : 游戏类头文件 Adventrue.cpp : 冒险模式类文件 Forest.cpp : 冒险模式-森林系列类实现文件 Dungeon.cpp : 冒险模式-地牢系列类实现文件 Infernal.cpp : 冒险模式-地狱系列类实现文件 Help.cpp : 帮助信息类实现文件 Other.cpp : 刷新界面、放置按钮、输出对话框类实现文件 ~~~
两个使用easyx优化的C语言小游戏.zip 探索C语言小游戏的无限可能 一、开启C语言游戏之门 对于许多初学者来说,C语言可能是一门既神秘又令人畏惧的语言。但其实,C语言也可以非常有趣!这次我们为您带来了一系列C语言小游戏资源,旨在让您在轻松愉快的氛围中,逐步掌握C语言的精髓。 二、资源亮点 由浅入深:我们为您提供了从入门级到进阶级的多种小游戏资源,满足您不同阶段的学习需求。 实践为王:这些资源不仅仅是理论,更有实际可运行的代码,让您亲身体验编程的乐趣。 模块化设计:每个游戏都按照功能模块进行划分,方便您学习和理解。 社区参与:我们鼓励您参与到社区中,与其他学习者分享经验,共同进步。 三、适用人群 无论您是初涉编程的新手,还是希望深入了解C语言的进阶者,这些资源都能为您提供宝贵的实践机会。 四、使用建议 边学边做:建议您在学习过程中,积极动手实践,亲自感受C语言的魅力。 不断挑战:尝试自行修改和优化游戏代码,培养独立思考和解决问题的能力。 交流与分享:加入我们的学习社群,与其他学习者交流心得,共同成长。 五、注意事项 尊重版权:请确保在使用这些资源时,遵循版权法规,尊重原创者的权益。 安全为先:在编写和运行代码时,请确保您的开发环境安全可靠,避免潜在风险。 持续学习:编程是一个不断进阶的过程,希望您能保持对知识的热情,持续深入学习。 感谢您选择我们的C语言小游戏资源系列!让我们一起在探索中成长,用代码书写属于我们的精彩故事!
以下是一个简单的双人射击小游戏的代码,使用C语言和EasyX图形库编写。 游戏规则: - 每个玩家控制一个坦克,可以移动和射击。 - 玩家每次射击会发射一枚子弹,子弹可以击中对方坦克或者砖头。 - 每个玩家初始有3条生命,被对方击中后生命减1,生命为0时游戏结束。 - 当其中一个玩家的生命为0时,游戏结束。 代码如下: ```c #include <graphics.h> #include <conio.h> #include <time.h> // 定义窗口大小和坦克、子弹的大小 const int WIDTH = 800; const int HEIGHT = 600; const int TANK_SIZE = 30; const int BULLET_SIZE = 5; // 定义玩家的生命 int life1 = 3; int life2 = 3; // 定义坦克的位置和速度 int x1 = 100, y1 = 100, speed1 = 5; int x2 = 500, y2 = 400, speed2 = 5; // 定义子弹的位置和速度 int bx1 = 0, by1 = 0, bspeed1 = 10; int bx2 = 0, by2 = 0, bspeed2 = 10; // 定义砖头的位置和大小 int brick_x = 300, brick_y = 200, brick_size = 50; // 判断两个矩形是否相交 bool isOverlap(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2) { return x1 + w1 > x2 && x2 + w2 > x1 && y1 + h1 > y2 && y2 + h2 > y1; } int main() { // 初始化窗口和随机数生成器 initgraph(WIDTH, HEIGHT); srand(time(NULL)); // 游戏循环 while (true) { // 清空屏幕 cleardevice(); // 绘制砖头 setfillcolor(YELLOW); solidrectangle(brick_x, brick_y, brick_x + brick_size, brick_y + brick_size); // 绘制玩家1的坦克 setfillcolor(RED); solidrectangle(x1, y1, x1 + TANK_SIZE, y1 + TANK_SIZE); // 绘制玩家2的坦克 setfillcolor(GREEN); solidrectangle(x2, y2, x2 + TANK_SIZE, y2 + TANK_SIZE); // 移动玩家1的坦克 if (GetAsyncKeyState('A') & 0x8000) x1 -= speed1; if (GetAsyncKeyState('D') & 0x8000) x1 += speed1; if (GetAsyncKeyState('W') & 0x8000) y1 -= speed1; if (GetAsyncKeyState('S') & 0x8000) y1 += speed1; // 移动玩家2的坦克 if (GetAsyncKeyState(VK_LEFT) & 0x8000) x2 -= speed2; if (GetAsyncKeyState(VK_RIGHT) & 0x8000) x2 += speed2; if (GetAsyncKeyState(VK_UP) & 0x8000) y2 -= speed2; if (GetAsyncKeyState(VK_DOWN) & 0x8000) y2 += speed2; // 玩家1发射子弹 if (GetAsyncKeyState('J') & 0x8000) { if (bx1 == 0 && by1 == 0) { bx1 = x1 + TANK_SIZE / 2 - BULLET_SIZE / 2; by1 = y1 - BULLET_SIZE; } } // 玩家2发射子弹 if (GetAsyncKeyState(VK_SPACE) & 0x8000) { if (bx2 == 0 && by2 == 0) { bx2 = x2 + TANK_SIZE / 2 - BULLET_SIZE / 2; by2 = y2 + TANK_SIZE; } } // 移动玩家1的子弹 if (by1 > 0) { by1 -= bspeed1; setfillcolor(RED); solidcircle(bx1 + BULLET_SIZE / 2, by1 + BULLET_SIZE / 2, BULLET_SIZE / 2); } else { bx1 = 0; by1 = 0; } // 移动玩家2的子弹 if (by2 < HEIGHT) { by2 += bspeed2; setfillcolor(GREEN); solidcircle(bx2 + BULLET_SIZE / 2, by2 + BULLET_SIZE / 2, BULLET_SIZE / 2); } else { bx2 = 0; by2 = 0; } // 判断玩家1的子弹是否击中砖头或者玩家2的坦克 if (bx1 > 0 && by1 > 0) { if (isOverlap(bx1, by1, BULLET_SIZE, BULLET_SIZE, brick_x, brick_y, brick_size, brick_size)) { bx1 = 0; by1 = 0; } else if (isOverlap(bx1, by1, BULLET_SIZE, BULLET_SIZE, x2, y2, TANK_SIZE, TANK_SIZE)) { bx1 = 0; by1 = 0; life2--; if (life2 == 0) { outtextxy(WIDTH / 2 - 50, HEIGHT / 2 - 50, "Player 1 win!"); _getch(); break; } } } // 判断玩家2的子弹是否击中砖头或者玩家1的坦克 if (bx2 > 0 && by2 > 0) { if (isOverlap(bx2, by2, BULLET_SIZE, BULLET_SIZE, brick_x, brick_y, brick_size, brick_size)) { bx2 = 0; by2 = 0; } else if (isOverlap(bx2, by2, BULLET_SIZE, BULLET_SIZE, x1, y1, TANK_SIZE, TANK_SIZE)) { bx2 = 0; by2 = 0; life1--; if (life1 == 0) { outtextxy(WIDTH / 2 - 50, HEIGHT / 2 - 50, "Player 2 win!"); _getch(); break; } } } // 显示玩家的生命 settextcolor(RED); char str1[20]; sprintf_s(str1, "Player 1 life: %d", life1); outtextxy(10, 10, str1); settextcolor(GREEN); char str2[20]; sprintf_s(str2, "Player 2 life: %d", life2); outtextxy(WIDTH - 120, 10, str2); // 延时 Sleep(20); } // 关闭窗口 closegraph(); return 0; } ``` 以上就是一个简单的双人射击小游戏的代码,希望能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值