最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)貪吃蛇游戲代碼

 更新時間:2022年02月07日 09:52:18   作者:鴻蒙之始  
大家好,本篇文章主要講的是C語言實現(xiàn)貪吃蛇游戲代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下

一、實現(xiàn)效果

鍵位:使用wasd四個鍵位來控制方向,按q鍵退出(注意在終用英文輸入法實現(xiàn)鍵控)

規(guī)則:蛇每吃一個豆會得10分,同時身體邊長、移速加快

當(dāng)蛇碰到墻壁或咬到自身時游戲結(jié)束,同時會輸出游戲得分

二、部分代碼解釋

(1)用結(jié)構(gòu)體定義蛇和豆

typedef struct Snakes
{
	int x;
	int y;
	struct Snakes *next;
}snake;
 
snake *head,*tail;
 
struct Food
{
	int x;
	int y;
}food;

(2)打印墻壁

void creatgraph()             
{
	int i;
	for (i = 0; i<58; i += 2)//打印上下邊框
	{
		gotoprint(i, 0);
		gotoprint(i, 26);
	}
	for (i = 1; i < 26; i++)
	{
		gotoprint(0, i);
		gotoprint(56, i);
	}
	head = (snake*)malloc(sizeof(snake));
	head->x = 16;
	head->y = 15;
	//gotoprint(head->x, head->y);
	tail = (snake*)malloc(sizeof(snake));
	snake *p = (snake*)malloc(sizeof(snake));
	snake *q = (snake*)malloc(sizeof(snake));
	p->x = 16;
	p->y = 16;
	q->x = 16;
	q->y = 17;
	head->next = p;
	p->next = q;
	q->next = tail;
	//gotoprint(p->x, p->y);
	//gotoprint(q->x, q->y);
	tail->next = NULL;
	tail->x = 4;
	tail->y = 2;	
}
 
void gotoxy(int x, int y)
{
	COORD pos;
	HANDLE hOutput;
	pos.X = x;
	pos.Y = y;
	hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOutput, pos);
}
 
void gotoprint(int x, int y)
{
	gotoxy(x, y);
	printf("■");
}
 
void gotodelete(int x, int y)
{
	gotoxy(x, y);
	printf("  ");
}

(3)生成豆

void creatfood()
{
	srand((int)time(NULL));
	lable:
	food.y = rand() % (25 - 1 + 1) + 1;
	food.x = rand() % (54 - 2 + 1) + 2;
	if (food.x % 2 != 0)
	{
		food.x = food.x+1;
	}
	snake *judge = head;
	while (1)  
	{
		if (judge->next == NULL) break;
		if (food.x == judge->x&&food.y == judge->y)
		{
			goto lable;
		}
		judge = judge->next;
	}
	gotoxy(food.x, food.y);
	printf("⊙");
}

(4)點擊控制函數(shù)

int ClickControl()
{
	char c;
	while (1)
	{
		if (Judge()==0) return 0;
		if (_kbhit())
		{
			click = _getch();
		}
		MovingBody();
		Eating();
	}
	return 1;
}

(5)移動控制

void MovingBody()
{
	int count = 0;
	int a = head->x, b = head->y;
	snake *p = head;
	while (1)
	{
		if (p->next == NULL) break;
		gotodelete(p->x, p->y);
		count++;
		p = p->next;
	}
	switch (click)
	{
		case up:
			head->y -= 1;
			ChangeBody(a,b);
			break;
		case down:
			head->y += 1;
			ChangeBody(a,b);
			break;
		case left:
			head->x -= 2;
			ChangeBody(a,b);
			break;
		case right:
			head->x += 2;
			ChangeBody(a,b);
			break;
		case stop:
			_getch();
			break;
	}
	p = head;
	while (1)
	{
		if (p->next == NULL) break;
		gotoprint(p->x, p->y);
		p = p->next;
	}
	p = head;
	gotoxy(0, 28);
	if (count <= 10) speed = 150;
	else if (count > 10 && count <= 20) speed = 100;
	else if (count > 20 && count <= 40) speed = 50;
	else speed = 10;
	Sleep(speed);
}

(6)更改蛇身

void ChangeBody(int a,int b)
{
	snake *p = head->next;
	int mid1, mid2,_mid1,_mid2;
	mid1 = p->x;
	mid2 = p->y;
	while (1)
	{
		if (p->next->next == NULL) break;
		
		_mid1 = p->next->x;
		_mid2 = p->next->y;
		p->next->x = mid1;
		p->next->y = mid2;
		mid1 = _mid1;
		mid2 = _mid2; 
		p = p->next;
	}
	p = head->next;
	{
		p->x = a;
		p->y = b;
	}
}

總結(jié)

到此這篇關(guān)于C語言實現(xiàn)貪吃蛇游戲代碼的文章就介紹到這了,更多相關(guān)C語言貪吃蛇游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++填坑的重寫,重載和隱藏的詳解

    C++填坑的重寫,重載和隱藏的詳解

    這篇文章主要介紹了C++中重載、重寫(覆蓋)和隱藏的區(qū)別,是C++面向?qū)ο蟪绦蛟O(shè)計非常重要的概念,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • c++與c中的數(shù)組初始化默認值如何為0

    c++與c中的數(shù)組初始化默認值如何為0

    這篇文章主要介紹了c++與c中的數(shù)組初始化默認值如何為0問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言循環(huán)鏈表的原理與使用操作

    C語言循環(huán)鏈表的原理與使用操作

    無論是靜態(tài)鏈表還是動態(tài)鏈表,有時在解決具體問題時,需要我們對其結(jié)構(gòu)進行稍微地調(diào)整。比如,可以把鏈表的兩頭連接,使其成為了一個環(huán)狀鏈表,通常稱為循環(huán)鏈表
    2022-05-05
  • C++獲取內(nèi)存使用情況小結(jié)

    C++獲取內(nèi)存使用情況小結(jié)

    在程序編程過程中,為了防止出現(xiàn)內(nèi)存泄漏情況出現(xiàn),需要持續(xù)關(guān)注內(nèi)存程序內(nèi)存占用情況,本文主要介紹了C++獲取內(nèi)存使用情況小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 使用C++和Direct3D (d3d)獲取屏幕截圖并根據(jù)傳入分辨率進行縮放圖片大小(最新推薦)

    使用C++和Direct3D (d3d)獲取屏幕截圖并根據(jù)傳入分辨率進行縮放圖片大小(最新推薦)

    這篇文章主要介紹了使用C++和Direct3D (d3d)獲取屏幕截圖并根據(jù)傳入分辨率進行縮放圖片大小,本文給大家講解的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • C++ Boost Tokenizer使用詳細講解

    C++ Boost Tokenizer使用詳細講解

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • 詳解C++編程中的虛函數(shù)

    詳解C++編程中的虛函數(shù)

    這篇文章主要介紹了詳解C++編程中的虛函數(shù),包括在什么情況下應(yīng)當(dāng)聲明虛函數(shù)的相關(guān)講解,需要的朋友可以參考下
    2015-09-09
  • C語言實現(xiàn)刪除某一個數(shù)組值的方法

    C語言實現(xiàn)刪除某一個數(shù)組值的方法

    這篇文章主要給大家分享C語言數(shù)組中刪除數(shù)組中某個值的方法,既然要學(xué)習(xí)刪除數(shù)組中的元素,我們就必須得先知道數(shù)組中有哪些元素。同時還要定義一個變量,并將需要刪除的元素賦值給那個變量。下面來看看文章的詳細內(nèi)容吧
    2021-11-11
  • C語言中求和、計算平均值、方差和標準差的實例

    C語言中求和、計算平均值、方差和標準差的實例

    這篇文章主要介紹了C語言中求和、計算平均值、方差和標準差的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 利用Debug調(diào)試代碼解決0xC0000005:?讀取位置?0x0000000000000000?時發(fā)生訪問沖突問題

    利用Debug調(diào)試代碼解決0xC0000005:?讀取位置?0x0000000000000000?時發(fā)生訪問沖突問

    這篇文章主要介紹了利用Debug調(diào)試代碼解決0xC0000005:?讀取位置?0x0000000000000000?時發(fā)生訪問沖突,本文給大家分享完美解決方案,需要的朋友可以參考下
    2023-03-03

最新評論

延安市| 诏安县| 县级市| 景德镇市| 营山县| 临颍县| 陇南市| 拉萨市| 遂溪县| 陈巴尔虎旗| 突泉县| 娄底市| 莆田市| 出国| 阿坝县| 黄浦区| 任丘市| 屏山县| 新营市| 大冶市| 禄劝| 西华县| 顺平县| 益阳市| 财经| 宜黄县| 乐都县| 平阳县| 左贡县| 大田县| 清流县| 蒙阴县| 镇安县| 西青区| 余干县| 永康市| 郓城县| 鹤山市| 大新县| 绿春县| 荃湾区|