高手坐镇 (17)

编程学堂

求助邮箱:pcw-chendx@vip.sina.com。

VC 编写贪吃蛇游戏

题目难度:★★

读者求助:这期的课后练习居然是编写一个贪吃蛇游戏(VC),汗!不会,特来求助!编辑部的GGJJ,一定要帮帮我!

程序员 故乡的云:这个很简单的,要判断蛇的行为是否触发条件(条件有很多,例如吃到食物就增加蛇的长度),要控制蛇的运动。关键代码下载地址(完整代码下载地址:http://www.icpcw.com/bzsoft):

void GamePlay(char ch)

{

randomize(); /*随机数发生器*/

food.yes=1; /*1代表要出现食物,0表示已存在食物*/

snake.life=0;

snake.direction=1;

snake.x[0]=100;snake.y[0]=100;

snake.x[1]=110;snake.y[1]=100;

snake.node=2;

PrScore();

while(1) /*可以重复游戏*/

{

while(!kbhit()) /*在没有按键的情况下蛇自己移动*/

{

if(food.yes==1) /*需要食物*/

{

food.x=rand()%400+60;

food.y=rand()%350+60; /*使用rand函数随机产生食物坐标*/

while(food.x%10!=0)

food.x++;

while(food.y%10!=0)

food.y++; /*判断食物是否出现在整格里*/

food.yes=0; /*现在有食物了*/

}

if(food.yes==0) /*有食物了就要显示出来*/

Delphi 开发监控软件

题目难度:★★★

读者求助:我打算做一个监控软件,当某条件被触发后就会提示用户(正常情况下用户看不到程序界面)。我希望《电脑报》的高手可以为我提供一些开发思路,谢谢!

程序员 故乡的云:监控软件网上已经有很多了,你先观察它们是怎么运作的,再着手开发。开发的关键是设定触发条件,例如提示文档要保存等。提示的方法有很多,最常见的是声音提示,例如当条件触发时执行播放音乐,且音乐循环播放。此外,还可以振动屏幕来提示用户。下面,我用一个Delphi案例进行说明。

//定义时间,时间一到自动提示用户去开会了

procedure TForm1.Button1Click(Sender: TObject);

var

i: integer;

begin

PlaySound(pchar('C:\WINDOWS\Media\aaa.wav'),0,snd_ASYNC or snd_loop);//此句的含义是播放C:\WINDOWS\Media\目录下的aaa.wav,并循环播放

for i := 0 to 4 do//屏幕振动

begin

Self.Refresh;//窗体刷新

Self.Top := Self.Top - 4; Sleep(50);//延时50毫秒并改变其在Windows中的坐标

Self.Left := Self.Left - 4; Sleep(50);

Self.Top := Self.Top + 4; Sleep(50);

Self.Left := Self.Left + 4; Sleep(50);

end;

end;

C语言 自学C语

读者求助:《电脑报》各位高手好!我就一个问题,如果想系统学习C语言,需要看哪些书?这些书,最好能在网上买到。

编辑 陈邓新:这个问题就不用麻烦其他人了,小编来回答吧!第一本书是谭浩强的《C语言程序设计》,很多学校都用它作为入门教材,小编看的第一本C语言书就是它。它的优点是简单易懂,能快速让你掌握C语言的基本语法。当然缺点也不少,不过作为入门书籍还是绰绰有余了,嘿嘿!

看了《C语言程序设计》,可以再看看《C程序设计语言》(The C Programming Language),它稍有难度,但更能让你系统掌握C语言知识。然后,可以看看《C语言解惑》,这可是一本好书,很多让人模糊不清的概念、容易混淆的知识点都可以在这本书中得到解惑。

此外,可以看看《C专家编程》和《高质量C/C++编程指南》,看了它们才算是正式踏上C语言开发之路了。再结合开发文档,多编写代码练练手(这个阶段要重点考虑代码执行效率了)。

到了这里,建议你不看书多看代码,多去一些编程网站混,日积月累就会提高编程水平。小编常去的编程网站有:IT实验室、编程中国、编程爱好者论坛、CSDN等。好啦,小编的家底都掏出来了,祝你好运

C语言 求100以内的素数

题目难度:★★!

读者求助:我是新手,才学C语言没有多久。最近编写了一段代码,求100以内的素数,编译不成功,不知道错在哪里?跪求指点!

程序员 吴雨:你的代码的确有问题,初始值不对,且循环的过程太啰唆,我给你一段代码,你试试。

int i,j,k=0,a[100];

for(i=0;i<=100;i++)

{

for(j=2;j

{

if(i%j==0) break;

}

if(j==i) {a[k]=i;k++;}

}

for(i=0;i

printf("%d\t",a[i]);

}