C语言 贪吃蛇

来源:互联网 发布:java面向对象的4大特征 编辑:程序博客网 时间:2024/04/29 21:02

       2016.12.25


       看到知乎说C掌握了大概后可以试试看写个贪吃蛇或者俄罗斯方块的小游戏。

       而宿舍里的大神这几天刚好想写一个俄罗斯方块,那我就来试试写写贪吃蛇吧(最近刚好经常玩手机里的贪吃蛇大作战...)。


       我想先试试看清屏函数的频率是怎么样的。

       想法是,定义一个大概[20][70]的字符数组作为背景大小(试了好久才找到这个尺寸),然后再试了好久,本来是想printf出黑圆点或者黑方块作为蛇身,然后>作为蛇头,然而发现黑圆或方块在ASCⅡ码里的数值在屏幕上printf出来是一个方块符,也就是说体现不出这个字符。

       本来这个白方块也是蛮好的,但加边框之后,发现如果用白方块,有白方块的那一行最后的边框会显示不好,那就先把这个形象的问题留到之后再来吧,决定先用大写字母O作为蛇身。。

       之后随便选了中间某行的几个位置,[5][3-9]作为一开始蛇的位置,然后写了一个输出的函数,还有每次让蛇向右前进一格,加上初始化边框和清屏函数,就是这样的:

#include<stdio.h>#include<stdlib.h>char bg[21][71]={0};  //背景backgroundint main(){int i,j;/*边框*/ for(i=0;i<20;i++){bg[i][0]='|';bg[i][69]='|';}for(i=1;i<69;i++){bg[0][i]='-';bg[19][i]='-';}/*初始化*/ bg[5][3]='O'; bg[5][4]='O'; bg[5][5]='O'; bg[5][6]='O'; bg[5][7]='O'; bg[5][8]='>'; bg[5][9]='>'; /*变化*/ for(i=0;i<20;i++){for(j=10;j<69;j++){bg[5][j]='>'; bg[5][j-2]='O'; bg[5][j-7]=0; system("CLS");print();}}/*输出函数*/ void print(){int i,j;for(i=0;i<20;i++){for(j=0;j<70;j++)printf("%c",bg[i][j]);putchar('\n');}}


       无奈,最后出来的效果实在受不了。。清屏的频率太快,导致每次都能看到边框一点点出来的痕迹,而且大部分时候下边框还没出现的时候就已经再清屏了一次。。
于是,上网搜索有没有办法控制清屏函数的时间,结果,发现了C语言还有一个叫Sleep函数的好东西!!
       加入头文件#include <unistd.h>定义函数:unsigned int sleep(unsigned int seconds);  通过Sleep(时间) 调用(记得大写S),时间是用毫秒表示。
       Sleep(500)即可以在代码执行到那时等待0.5秒再往下。
       于是,贪吃蛇的最基本原型就出来了哈哈哈哈哈~

       下一个问题就是怎么加入方向键以控制蛇的方向了。。。到这先暂停,看高数线代去,不然真要挂科了。。



       2016.12.27

  

       原来Sleep函数s也是可以小写的,大写时括号里就是毫秒,小写时就是秒了,难怪昨天试的时候屏幕一动不动。。。


       然后发现了一个好东西!

       if(kbhit())         //当不为0时,也就是键盘有输入
dir = getchar();  //从输入流中得到一个字符

       可以用来无等待无屏显地接受键盘输入!


       然而,贪吃蛇的计划停止了。

       因为我发现,清屏频率总是容易跟键盘键入产生矛盾,虽是0点多秒,但也总容易出错。所以就到此先停止了。

       等以后学习了线程,再看看能不能继续解决吧。



0 0
原创粉丝点击