首页 > 其他分享 >球球大作战

球球大作战

时间:2024-09-08 12:21:27浏览次数:10  
标签:球球 flag 作战 player int food 食物 include

代码: 

#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;
}









效果:

 

 

思考总结: 

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

标签:球球,flag,作战,player,int,food,食物,include
From: https://blog.csdn.net/2301_80950699/article/details/141969889

相关文章

  • Linux性能调优大作战:从零到英雄,手把手教你打造极速系统!让你的服务器快如闪电!
    第一章引言Linux系统性能调优在信息技术领域具有不可忽视的重要性。随着Linux操作系统的广泛应用,从桌面环境到大型服务器集群,其性能优化变得尤为关键。调优不仅可以提升系统的响应速度和吞吐量,还能降低资源消耗,从而延长硬件使用寿命,减少总体拥有成本。本文研究旨在深入探讨Li......
  • 赛场上,教练作战计划迅速Get!编码时,巨量复杂代码轻松掌握!
    赛场上,教练作战计划迅速Get!编码时,巨量复杂代码轻松掌握!与文心快码一起为再次夺冠蓄力!赛场上,教练作战计划迅速Get!编码时,巨量复杂代码轻松掌握在赛场上,教练以敏锐的洞察力,超强的理解力,迅速制定作战计划。同样,在编程的浩瀚宇宙里,面对巨量而复杂的代码海洋,文心快码将成为每位......
  • 基于协同过滤推荐算法+springboot+vue的篮球球队网站
    博主主页:猫头鹰源码博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作​主要内容:毕业设计(Javaweb项目|小程序|Python|HTML|数据可视化|SSM|SpringBoot|Vue|Jsp|PHP......
  • 城市作战 | 装甲车的态势感知
        Plasan推出了一种名为"刺猬"(Hedgehog)的新型顶部装甲,旨在阻止炸弹穿透车辆顶部。    装甲车在城市作战中面临诸多挑战。装甲车会受到狙击手或反坦克小组的攻击,他们会从屋顶的高处作战,或进入地下井,距离太近,以致无法作出反应。在这种情况下,必须增......
  • pta大作战
    对于前三次pta作业的总结分析1)前言:知识点:类的设计,类与对象的使用,数组的基本运用,关联类,复杂情境下多种类的设计与使用,类的封装,日期类的基本使用。在后续讲解后还可以用到正则表达,HashMap等知识。题量:由于每次作业最后一题难度较大,所以简单题目的数量并不多,题量适中。难度:每次的......
  • 【每周例题】蓝桥杯 C++ 鸡哥的蛋糕大作战
    鸡哥的蛋糕大作战题目鸡哥的蛋糕大作战 题目分析1.使用一个for循环遍历全数,寻找最大洞的数2.使用一个while进行数位拆分,寻找洞的数量3.使用if从两个条件寻找最大洞的最小数符合最大洞的数洞数相同中的最小数代码#include<iostream>#include<bits/stdc++.h>using......
  • C语言游戏实战(11):贪吃蛇大作战(多人对战)
         成果展示:贪吃蛇(多人对战) 前言:这款贪吃蛇大作战是一款多人游戏,玩家需要控制一条蛇在地图上移动,吞噬其他蛇或者食物来增大自己的蛇身长度和宽度。本游戏使用C语言和easyx图形库编写,旨在帮助初学者了解游戏开发的基本概念和技巧。在开始编写代码之前,我们需要先......
  • Python实现【贪吃蛇大作战】+源码
    文章目录前言:一、游戏概述1.游戏玩法2.游戏特色二、游戏规则三、工具选择四、主要技术pygame库numpy库cocos2d五、源码分享六、项目地址前言:今天的GitHub小游戏分享,我们将聚焦于一个经典而又极富趣味性的游戏——贪吃蛇大作战。这款游戏不仅考验玩家的反应速度......
  • 加固HTML大作战:网站安全性提升方案解读
    引言HTML是网站开发的基础语言,它的安全性直接关系到网站的安全性。为了保障网站的安全性,我们需要加固HTML代码。本文将介绍一些具体方法,帮助你加固HTML代码,提高网站的安全性。摘要本文将介绍以下几种方法来加固HTML代码以保障网站的安全性:移除不必要的注释、过滤输入内容......
  • 【JS球球大作战项目实战】+在线体验
    个人名片:......