欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 球球大作战

球球大作战

2024/10/25 3:21:32 来源:https://blog.csdn.net/2301_80950699/article/details/141969889  浏览:    关键词:球球大作战

代码: 

#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));//强转为unsignedplayer.x = 100;player.y = 100;player.r = 10;//半径为10player.flag = true;//初始化食物for (int i = 0; i < FOOD_NUM; i++){//食物在画面上是随机的food[i].x = rand() % WIDTH;food[i].y = rand() % WIDTH;//圆的半径不可以为0food[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;
}

效果:

 

 

思考总结: 

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com