贪吃蛇程序(c/Linux)

很早就有了这个想法,只是一直没有践行,经过零零碎碎地小作业,慢慢就做了出来,看起来还行。
下面说一下我的思路:
a 通过画一个二维数组显示游戏框图
b 创建蛇,单向链表最合适了
c 蛇的行动,撞墙、吃自己:游戏结束,移动、吃食物:游戏进行
d 蛇的控制,一开始用简单的getchar模拟,后面从网上找了按键识别,做出来了,还有待学习
e 游戏步骤:恢复空图->写入蛇->写入食物->输出画面->控制输入->蛇的行动->游戏结束判断->恢复空图
总的来说,还有一些结构可以优化,部分可以集合到一个函数里,画面还ok。
难点:1 蛇移动的函数设计,开始用传入结点指针,返回void,结果蛇走一下没动,从尾巴到蛇头慢慢缩成一个头,于是发现传入的蛇头只是指针的值(形参),原来的蛇头还是没变,于是设计了返回结点指针,通过赋值 snake = Move(snake)的方式更新蛇头,然后蛇就活了
2 按键的输入,此处涉及I/O的操作,借鉴的网上代码,待学习
3 逻辑转换,二维数组与数学中x,y坐标的转换一开始就弄得很混乱,但所幸才二维而已,通过高度、宽度的概念一下就清晰了。

还算简单,脑海中有大概的思路,剩下的就是一步步来,多用printf()把错误点定位出来,下一步,继续学习。

<c/centos>  
  1 #include <stdio.h>
  2 #include <time.h>
  3 #include <malloc.h>
  4 #include <unistd.h>
  5 #include <fcntl.h>
  6 #include <stdlib.h>
  7 #include <sys/select.h>
  8 
  9 void setIO(int flag)
 10 {
 11         if(flag)
 12                 system("stty cbreak -echo");
 13         else
 14                 system("stty cooked echo");
 15 }
 16 
 17 #define high 20
 18 #define wide 30
 19 
 20 #define up 1
 21 #define down 2
 22 #define left 3
 23 #define right 4
 24 
 25 int score  = 0;
 26 int Level = 1;
 27 int direction = 1;
 28 int IsEat=0;
 29 int FoodH=5,FoodW=10;
 30 
 31 char Picture[high][wide];  //游戏框图
 32 
 33 typedef struct snake{
 34       int x;
 35       int y;
 36       struct snake* next;
 37 }Node,*PSnake;
 38 
 39 PSnake Init()           //生成一条蛇  坐标为中心点向下5个格,蛇头向上 
 40 {
 41    printf("SnakeMake start!\n");
 42    int len=5;
 43    PSnake head=(PSnake)malloc(sizeof(Node));
 44    if(head == NULL)
 45          printf("Snake head make failed!\n");
 46    head->x=wide/2;
 47    head->y=high/2+5;
 48    head->next=NULL;
 49 
 50    int i=0;
 51    for(;i<5;i++)
 52    {
 53       PSnake P=(PSnake)malloc(sizeof(Node));
 54       if(P==NULL)
 55       {     printf("Frog king is dead!\n");
 56             break;
 57       }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值