网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月29日
漏签
0
天
easyx吧
关注:
10,873
贴子:
46,599
看贴
图片
吧主推荐
游戏
8
回复贴,共
1
页
<<返回easyx吧
>0< 加载中...
请大佬指点,如何通过链表实现,子弹和敌机的碰撞
只看楼主
收藏
回复
tangyinlongs
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
求牛人帮我改一下代码。
https://pan.baidu.com/s/1nEmXUtcxCVzv432IiXrcIg
源码地址
柳下白衣_
三年级
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我看了下代码,太晚了还没完全弄好,现在是几率性打爆飞机。我觉得原因出可能在碰撞的y上,y不是范围会导致子弹刚好不是这个数就不碰撞。还有存在的问题有
1.子弹和敌机不是同一类,敌机有活的和死的状态。类型要分开。
2.没有对飞机或者子弹做删除处理,程序会越运行越卡。
3.击中敌机应该有动画效果,不然没有反馈。
4.运行一段时间后会没飞机。不知道原因。
以上可能会判断有错,一起交流交流
柳下白衣_
三年级
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这个没问题了,之前忘了把那个头指针放入循环里初始化。
柳下白衣_
三年级
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
#include<stdio.h>#include<conio.h>#include<graphics.h>#include<mmsystem.h>#include<time.h>#pragma comment(lib,"winmm.lib")#define width 1200//窗口宽度#define high 800//窗口高度#define W 80//飞机宽度#define H 20//子弹宽度IMAGE img[30];WORD t1,t2,t3,t4;//时间int x=0,y=0;struct//战机结构体{int x;int y;}plane;struct DNode//定义敌机结构体{int y;int x;bool ZT;//敌机状态struct DNode *pNext;}Enemy;struct Node//定义子弹结构体{int y;int x;struct Node *pNext;}Bullet;struct DNode *pEnemy =NULL;//敌机指针struct Node *pBullet=NULL;//子弹指针void createEnemy()//创建敌机链表{t2=GetTickCount();if(t2-t1>=1200){struct DNode *pnew=(struct DNode *)malloc(sizeof(struct DNode ));pnew->x = rand() % (width - W);pnew->y = 0;pnew->ZT = 1;pnew->pNext = NULL;if (pEnemy == NULL)//如果为空{pEnemy = pnew;}else{pnew->pNext = pEnemy;pEnemy = pnew;}t1=t2;}}void show_Enemy(struct DNode *pnew)//显示 敌机{while(pnew!=NULL)//遍历链表{if (pnew->ZT == 1)//如果飞机是活的,就显示他{putimage(pnew->x, pnew->y, &img[3], NOTSRCERASE);putimage(pnew->x, pnew->y, &img[4], SRCINVERT);//pnew->y++;}pnew=pnew->pNext; }}void createBullet()//创建子弹链表{struct Node *pnew=(struct Node *)malloc(sizeof(struct Node ));pnew->x=plane.x+W/2-H/2;pnew->y=plane.y-H;pnew->pNext=NULL;if(pBullet==NULL)//如果为空{pBullet=pnew;}else{pnew->pNext=pBullet;pBullet=pnew;}}void show_Bullet(struct Node *pnew)//显示子弹{while(pnew!=NULL){putimage(pnew->x,pnew->y,&img[5],NOTSRCERASE);putimage(pnew->x,pnew->y,&img[6],SRCINVERT);pnew->y-=1;pnew=pnew->pNext;}}void pengzhuang()//碰撞{struct Node *pnew = pBullet;//指针指向链头bool flag = 1;while(pnew!=NULL)//遍历子弹 {struct DNode *pEnew = pEnemy;//指针指向链头while (pEnew != NULL)//遍历敌机{if (((pnew->x) >= (pEnew->x)) && ((pnew->x) <= (pEnew->x + W)) && ((pnew->y) <= (pEnew->y+W)) && ((pnew->y) >= (pEnew->y)) && ((pEnew->ZT) == 1)){//当发生碰撞时,飞机状态为1;pEnew->ZT = 0;//则飞机状态为0(死)}pEnew = pEnew->pNext;
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示