球球大作战

news2024/9/21 22:33:58

代码: 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdbool.h>
#include<graphics.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>//随机数库文件
#include<math.h>
#include<tchar.h>


/*
注重的是思路 思路 思路

游戏有哪些元素?
玩家 食物 背景音乐

坐标:x,y; 球体 :r
*/

//定义属性
#define FOOD_NUM 100
#define WIDTH 1024
#define HEIGHT 620
struct Ball
{
	int x;
	int y;
	int r;
	bool flag;//状态 true:活着; false:死了
	DWORD color;//无符号long
};

//玩家
struct Ball player;

//食物
struct Ball food[FOOD_NUM];//定义一个结构体数组

//初始化属性
void gameInit()
{
	//随机数种子
	srand((unsigned)time(NULL));
	//强转为unsigned
	player.x = 100;
	player.y = 100;
	player.r = 10;//半径为10
	player.flag = true;

	//初始化食物
	for (int i = 0; i < FOOD_NUM; i++)
	{
		//食物在画面上是随机的
		food[i].x = rand() % WIDTH;
		food[i].y = rand() % WIDTH;
		//圆的半径不可以为0
		food[i].r = rand() % 5 + 1;
		food[i].flag = true;
		//食物上色好看
		food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256, );
	
	}
}

//移动玩家 
void movePlayer()
{
	char key = _getch();
	//switch (key)
	//{
	//case 72:
	//	player.y -= 2;
	//	break;//上
	//case 80:
	//	player.y += 2;

	//	break;//下
	//case 75:
	//	player.x -= 2;
	//	break;//左
	//case 77:
	//	player.x += 2;
	//	break;//右
	//default:
	//	break;
	//}   //switch case语句只能上下左右,手感不好

	//异步按键  //获取异步状态 监听按键

	//球一闪一闪的,是因为双缓冲机制
	if (GetAsyncKeyState(VK_UP)) {

		player.y -= 2;
	}
	if (GetAsyncKeyState(VK_DOWN)) {
		player.y += 2;

	}
	if (GetAsyncKeyState(VK_LEFT)) {
		player.x -= 2;
	}
	if (GetAsyncKeyState(VK_RIGHT)) {
		player.x += 2;
	}
}
//设置游戏界面
void gameDraw()
{
	//设置一个游戏的背景颜色
	setbkcolor(WHITE);

	//清理一下设备
	cleardevice();

	//画格子
	setlinecolor(RGB(230, 231, 239));
	for (int i = 0; i < WIDTH; i+=10)
	{
		line(i, 0, i, HEIGHT);//竖线
		line(0, i, WIDTH,i);//横线
	}
	//画食物
	for (int i = 0; i < FOOD_NUM; i++)
	{
		if (!food[i].flag)//食物不存在了那么就跳过本次循环
			continue;
		//绘制食物颜色
		setfillcolor(food[i].color);//颜色已经初始化好了,直接绘制填充
		//绘制食物本体
		solidcircle(food[i].x, food[i].y, food[i].r);
	}

	//玩家是一个圆形
	setfillcolor(RED);
	//画在哪里
	solidcircle(player.x, player.y, player.r);
	//显示玩家名字
	TCHAR playername[20] = _T("player");
	settextcolor(BLACK);
	settextstyle(20, 0, L"楷体");
	setbkmode(TRANSPARENT);
	outtextxy(player.x - textwidth(playername) / 2, player.y, playername);
	movePlayer();
	
	
}

double distans(struct Ball*b1, struct Ball* b2)
{
	//sqrt求距离函数 跟下x方+y方
	return sqrt((b1->x - b2->x) * (b1->x - b2->x) + (b1->y - b2->y )* (b1->y - b2->y));
}
void PlayerEatFood()
{
	for (int i = 0; i < FOOD_NUM; i++)
	{
		if (food[i].flag && distans(&food[i],&player)< player.r)
		{
			food[i].flag = false;
			//玩家变大
			player.r += food[i].r / 2;
		}
	}
}
int main()
{
	//创建一个游戏窗口
	//c/c++有一个窗口文件easyx
	//创建一个宽为1024 高为640的窗口
	initgraph(WIDTH, HEIGHT, EW_DBLCLKS);
	//EW_DBLCLKS参数是规定的
	
	//调用初始化结果
	gameInit();
	//printf("%d %d %d %d", player.x, player.y, player.r, player.flag);
	//清空屏幕
	system("cls");
	BeginBatchDraw();//窗口闪动,双缓冲机制
	while (1)
	{
		gameDraw();
		FlushBatchDraw();//刷新
		PlayerEatFood();
		//暂停一下执行  线程控制速度
		Sleep(10);

	};//死循环一直显示窗口
	//清空屏幕
	closegraph();
	return 0;
}









效果:

 

 

思考总结: 

游戏体验感不够好,食物不够多,食物被吃掉后没有新的食物添加;边界处小球移动就看不到了;通过上下左右键移动时不够灵敏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2111489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单点登录CAS

CAS&#xff08;Central Authentication Service&#xff09;是耶鲁大学发起的一个开源项目&#xff0c;旨在为Web应用系统提供一种可靠的单点登录解决方案。CAS服务器独立部署&#xff0c;作为独立的Web应用&#xff0c;负责处理用户的认证请求并颁发票据&#xff08;Ticket&a…

P0.7全倒装COB超微小间距LED显示屏厂家已量产,加速高清显示的发展

随着P0.7全倒装COB超微小间距LED显示屏技术的成功量产&#xff0c;这一里程碑式的成就不仅标志着高清显示技术迈入了全新纪元&#xff0c;更预示着未来视觉体验将迎来前所未有的变革。各大应用场景&#xff0c;如指挥中心、会议中心、大型活动直播、高端影院乃至家庭娱乐&#…

如何高效学习越南语,求方法,急!!!

高效学习越南语需要掌握基础语法和词汇&#xff0c;并通过将自己置于语言环境中来加强实际应用。与母语为越南语的人进行语言交换&#xff0c;利用语言学习应用&#xff0c;制定学习计划&#xff0c;以及进行阅读和写作练习都是提高语言能力的有效方法。同时&#xff0c;通过听…

【JavaSE基础】Java 基础知识

Java 转义字符 Java 常用的转义字符 在控制台&#xff0c;输入 tab 键&#xff0c;可以实现命令补全 转义字符含义作用\t制表符一个制表位&#xff0c;实现对齐的功能\n &#xff1a;换行符\n换行符一个换行符\r回车符一个回车键 System.out.println(“韩顺平教育\r 北京”);&…

C语言第一周课

目录 1.程序设计的基本概念是什么?C语言是什么?算法是什么? 2.开发环境 3.第一个C语言程序 4.搭建VC6编译环境 5.实际操作,完成第一个C语言程序 6.体验在线编译环境 1.程序设计的基本概念是什么?C语言是什么?算法是什么? C语言是一种较早的程序设计语言&#xff0c…

DORIS - DORIS行存编码格式JSONB

是什么&#xff1f; JSONB(JavaScript Object Notation Binary)是PostgreSQL、MySQL数据库中的一种数据类型&#xff0c;用于存储和查询JSON数据。它提供了在数据库中存储和操作JSON数据的能力&#xff0c;使得数据库能够更好地处理半结构化数据。JSONB是一种半结构化的数据雷…

Hive SQL基础语法及查询实践

目录 基础语法 1. 官网地址 2. 查询语句语法 基本查询&#xff08;Select…From&#xff09; 数据准备 &#xff08;0&#xff09;原始数据 &#xff08;1&#xff09;创建部门表 &#xff08;2&#xff09;创建员工表 &#xff08;3&#xff09;导入数据 全表和特定列查…

HNU-2023电路与电子学-实验1

写在前面&#xff1a; 这是电路与电子学课程的第一次实验&#xff0c;按照指导书的需求在Multisim软件搭建一个电路传感器模型&#xff0c;难度较小&#xff0c;细心完成就没有问题。 小tips&#xff1a;22级实验是采用上传到测试平台来进行功能检测&#xff0c;如果不通过则…

嵌入式s3c2240: ADC

ADC &#xff1a;模数转换 10 位 CMOS ADC &#xff08;模 / 数转换器&#xff09;是一个 8 通道模拟输入的再循环类型设备。其转换模拟输入信号为 10 位二进制数字编码&#xff0c;最大转换率为 2.5MHz A/D 转换器时钟下的 500 KSPS 。 模拟&#xff1a;连续信号 数字…

乘法问题c++

题目描述 小 A 最近刚刚学习了乘法&#xff0c;为了帮助他练习&#xff0c;我们给他若干个正整数&#xff0c;并要求他将这些数乘起来。 对于大部分题目&#xff0c;小 A 可以精准地算出答案&#xff0c;不过&#xff0c;如果这些数的乘积超过 &#xff0c;小 A 就不会做了。 …

MySQL学习--加强

流程控制函数 mysql表查询--加强 分页查询

5款ai智能改写工具,自动改写文章效率惊人

在这个信息迭代加速的时代&#xff0c;ai智能改写工具犹如一把魔法钥匙&#xff0c;轻轻一转&#xff0c;便能开启文章改写的大门。想象一下&#xff0c;那些曾经费尽心思打磨的文章&#xff0c;如今只需几秒钟&#xff0c;就能以全新的面貌示人&#xff0c;这不仅是一场效率的…

PDF样本图册转换为一个链接,随时打开无需印刷

想象一下&#xff0c;您手中有一本厚重的样本图册&#xff0c;里面包含了丰富多样的内容&#xff0c;如产品介绍、项目方案、学术论文等。在过去&#xff0c;您需要逐一翻阅、筛选&#xff0c;甚至为了便于查看&#xff0c;不得不将其印刷出来。如今&#xff0c;借助先进的数字…

python tkinter 文本类组件

Label组件 Label(win,text文本,justifycenter) win指定Label组件的父容器&#xff1b;text指定标签中的文本&#xff1b;justify指定标签中拥有多行文本时&#xff0c;最后一行文本的对齐方式。 from tkinter import * from PIL import Image,ImageTkroot Tk() root.title(…

栈 | 队列

系统栈主要保存以下内容&#xff1a; 1.局部变量&#xff0c;2.函数的形参和返回值 3.函数的调用关系 一、栈 1.基本概念 栈是一种特殊的线性表&#xff0c;具有线性结构。表尾为栈顶&#xff0c;表头为栈顶。遵循先进后出原则&#xff0c;只能在栈顶进行插入和删除操作。 …

KADAL | Kriging代理模型Python工具箱推荐

用于分析、设计优化和探索的Kriging工具箱 简介Required packagesQuick ExamplesContact特别感谢&#xff1a;参考资料 简介 用于分析、设计优化和探索的克里金法 (Kriging for Analysis, Design optimization, And expLoration, KADAL) 是由万隆理工学院 (Institut Teknologi…

Linux——解压大型zip文件报错:bad zipfile offset (local header sig) 的解决方法

一、现象描述 完整一行报错信息&#xff1a; error: invalid compressed data to inflate file #14: bad zipfile offset (local header sig) 二、解决办法 利用 -F 去修复&#xff1a; zip -F xxx.zip --out large.zip得到&#xff1a; 解压&#xff1a; unzip large.zi…

COI实验室技能:图像到图像的深度学习开发框架(pytorch版)

Basic deep learning framework for image-to-image 这个开发框架旨在帮助科研人员快速地实现图像到图像之间的模型开发。 github连接&#xff1a;https://github.com/SituLab/Basic-deep-learning-framework-for-image-to-image 目录 1模型开发 1-1克隆项目到本地1-2深度学…

HashMap实现原理分析

for (Entry<K,V> e table[i]; e ! null; e e.next) { Object k; //如果key在链表中已存在&#xff0c;则替换为新value if (e.hash hash && ((k e.key) key || key.equals(k))) { V oldValue e.value; e.value value; e.recordAccess(this); retur…

今麦郎「日记薪·1号发」 即时反馈,激活10000+名基层员工

本文内容整理自红海云CEO孙伟对今麦郎集团人力资源总经理王高峰、IT管理中心副总经理邹大勇的访谈。 坚持创新求变的品牌基因 过去30年&#xff0c;中国食品工业蓬勃发展&#xff0c;孕育出一批批在国际舞台上熠熠生辉的民族品牌。今麦郎作为民族品牌代表&#xff0c;自1994年…