贪吃蛇之C语言实现

学习目标:

用C语言实现贪吃蛇


学习内容:

  1. 首先画出游戏基本静态界面,用表较常用的循环来实现。

  2. 画出蛇的静态形状,用[][]表示。首先是定义三个静态的结点,然后优化成一个addNode()函数,并且用链表来实现,根据按下的方向键不一样,采取不一样的变化。关键的是链表的操作,每一次增加一个结点,新的结点需要指向NULL,然后tail指针指向新结点,然后再赋给新结点。

  3. 引用ncurses控制上、下、左、右,实现实时响应,需要用到这个库自带的keypad()函数。同时后续的异常显示需要用noecho()来解决。

  4. 画出随机食物,用##来表示,使用rand()%20函数来实现随机食物的出现。

  5. 在蛇移动的时候,结点会接连地生成和消失,定义一个deleteNode()函数实现。

  6. 最后一个关键是需要使用双线程,因为按下按键的时候界面需要刷新,单不可以是一个单独的线程,否则无法完成。

  7. 修改bug,蛇的身体可以往回跑,这个采用宏定义,将上下和左右分组,分别使用相反数表示,然后采用绝对值来判断,只有在新旧按键的绝对值不相等时,才可以触发。

部分源代码:

void gamePic(){

	int row;
	int column;
	
	move(0,0);
	for(row=0; row<20; row++){
		if(row == 0){
			for(column=0; column<20; column++){
				printw("--");
			}
			printw("\n");
		}
		if(row>=0 && row<=20){
			for(column=0; column<=20; column++){
				if(column == 0 || column == 20){
					printw("|");
				}else if(hasSnakeNode(row,column)){
					printw("[]");
				}else if(hasFood(row,column)){
					printw("##");
				}
				else{
					printw("  ");
				}
			}
			printw("\n");
		}
		if(row==19){
			for(column=0; column<20; column++){
				printw("--");
			}
			printw("\n");
			printw("By DXD,key=%d\n",key);
		}
	}
}

具体源代码


你可能感兴趣的:(c语言)