| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1254 人关注过本帖, 1 人收藏
标题:[原创]碰撞演示
只看楼主 加入收藏
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏(1)
 问题点数:0 回复次数:9 
[原创]碰撞演示

大家好,好久没来了,学校有点事情,浪费了我差不多半个假期,前天刚回来,练练手,代码可能有点罗嗦吧。我正在研究bitblt()函数的原理,我想用c实现,顺便请教各位高手。 /* Hit.cpp */ #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <dos.h> #include <bios.h> #include <graphics.h>

#define SCREEN_HEIGHT 480 #define SCREEN_WIDTH 640

static int dx=1,dy=1; static unsigned int r=20; static unsigned int cx=0,cy=0;

unsigned int randrange(int start,int end) { randomize(); unsigned int ret=start+rand() % (end-start) + 1; return ret; }

void igdrv(void) { int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, ""); errorcode = graphresult(); if (errorcode != grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* return with error code */ } }

void draw_border(void) { setcolor(WHITE); line(0,0,SCREEN_WIDTH-1,0); line(0,0,0,SCREEN_HEIGHT-1); line(0,SCREEN_HEIGHT-1,SCREEN_WIDTH-1,SCREEN_HEIGHT-1); line(SCREEN_WIDTH-1,0,SCREEN_WIDTH-1,SCREEN_HEIGHT-1); }

void draw_ball(void) { cx=randrange(r+1,SCREEN_WIDTH-2-r); cy=randrange(r+1,SCREEN_HEIGHT-2-r); setcolor(WHITE); circle(cx,cy,r); }

void direction(void) { randomize(); dx = (rand() % 100+1) < 50 ? dx : -dx; dy = (rand() % 100+1) < 50 ? dy : -dy; }

void reflect(void) { if(cx==r+1||cx==SCREEN_WIDTH-r-2) dx=-dx; if(cy==r+1||cy==SCREEN_HEIGHT-r-2) dy=-dy; }

int main() { int flag=1,key; igdrv(); // draw the border draw_border(); // first time , draw the ball draw_ball(); // random a direction of action direction(); do { do { delay(2); if(flag) { setcolor(BLACK); circle(cx,cy,r); cx+=dx; cy+=dy; setcolor(WHITE); circle(cx,cy,r);

if((cx==r+1||cx==SCREEN_WIDTH-r-2)||(cy==r+1||cy==SCREEN_HEIGHT-r-2)) { flag=0; } } else { reflect(); flag=1; } } while(!bioskey(1)); // Press esc to exit the program. } while((key=bioskey(0))!=0x11b);

closegraph(); return 0; }

搜索更多相关主题的帖子: 演示 
2005-08-18 21:34
84009030
Rank: 1
等 级:新手上路
帖 子:191
专家分:0
注 册:2005-5-19
收藏
得分:0 
不能运行...

/* HELLO.C -- Hello, jat chan */ #include \"stdio.h\" #include \"conio.h\" main() { printf(\"Hello, jat chan\\n\"); getch(); }
2005-08-18 21:57
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 
TC2.0下编译的话,把//...注释行改成/*...*/注释行

我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2005-08-18 22:13
牛虻
Rank: 1
等 级:新手上路
威 望:1
帖 子:472
专家分:0
注 册:2004-10-1
收藏
得分:0 
以下是引用yuki在2005-8-18 21:34:29的发言: unsigned int randrange(int start,int end) { randomize(); unsigned int ret=start+rand() % (end-start) + 1;//这两句应该调换一下吧 return ret; }

[此贴子已经被作者于2005-8-18 22:41:19编辑过]


土冒
2005-08-18 22:40
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
呵呵,好玩,就是太快了点,而且才一个ball,路线也被你的算法固定了

淘宝杜琨
2005-08-19 17:58
牛虻
Rank: 1
等 级:新手上路
威 望:1
帖 子:472
专家分:0
注 册:2004-10-1
收藏
得分:0 
以下是引用神vLinux飘飘在2005-8-19 17:58:22的发言: 呵呵,好玩,就是太快了点,而且才一个ball,路线也被你的算法固定了
对呀,如果能多个ball应该会更好,而且还要考虑多个之间的碰撞规律(有点小难)。

土冒
2005-08-19 22:07
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 
谢谢各位,的确是好提议,我有空试着做一下。。

我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2005-08-20 00:32
沉路
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2005-5-15
收藏
得分:0 
用c真难。要是用vb两下就出来。

我的博客:http://tongshengyuan. 我的博客:http://sanweishuwu2005.
2005-09-07 16:54
sjyf
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2005-10-18
收藏
得分:0 
速度太快了!
2005-10-18 13:53
sjyf
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2005-10-18
收藏
得分:0 
还有要是用tabur c2.0的话除了把注释符号改一下外,还要把

unsigned int randrange(int start,int end) { randomize(); unsigned int ret=start+rand() % (end-start) + 1; return ret; } 做一些修改:

unsigned int randrange(int start,int end) { unsigned int ret=start+rand() % (end-start) + 1;  randomize(); return ret; }

2005-10-18 14:01
快速回复:[原创]碰撞演示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016254 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved