基于Linux curses库的贪吃蛇

一、必须基础知识

1、链表的增删改查
2、Linux多线程编程
3、Linux curses库的使用

二、核心思想

使用动画的思想,蛇每移动一次重新画一次游戏界面,然后覆盖上一次的游戏界面

void PrintMap()

因此有一个线程用于刷新地图

void* RefreshMap(void *arg)
{
    usleep(SPEED);
	while(1){
		MoveSnake(key);
		move(0,0);
		PrintMap();
		refresh();
		usleep(SPEED);			
	}
}

三、获取按键输入

输入的按键只能是上下左右和回车,方向不能是当前的反方向,因此先用key_temp来或许输入,再跟上次的按键求和,如果和是两个相反方向的宏定义值之和,则证明输入为反向。

void* GetKey(void *arg)
{	
	int key_temp;
	while(1)
	{
		key_temp=getch();
		if(key_temp != KEY_UP && key_temp != KEY_DOWN 
				&& key_temp != KEY_LEFT && key_temp != KEY_RIGHT
					&&	key_temp != 012)
		{
			continue;
		}
		if((key_last+key_temp == KEY_UP + KEY_DOWN) || (key_last+key_temp == KEY_LEFT + KEY_RIGHT)){
			continue;
		}
        if(key_temp == 012){
            continueFlag = 1;
            continue;
        }       		
		key = key_temp ;
		key_last = key ;
	}
}

四、蛇移动

根据当前key值确定移动方向,并判断是否吃到食物和撞墙

五、蛇撞墙后的花里胡哨画面

void dieMap()
{
	int line;
	int col;
	
    move(0,0);

	for(line=0;line<22;line++){
		
		if(line == 0 || line == 21){
			for(col=0;col<20;col++){		
				printw("--");
			}
		}
		else{
			for(col=0;col<21;col++){
				if(col == 0 || col ==20){
					printw("|");
				}
				else{
					printw("  ");
				
				}				
			}
		}		
		printw("\n");
       
	}

    move(10,20-strlen("Snake die!!! Snake die!!!")/2);
    printw("Snake die!!! Snake die!!!");
    move(11,20-strlen("please press Enter to continu!!!")/2);
    printw("please press Enter to continue!!!");
    move(22,0);
    refresh();
   
}

六、效果图

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值