欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于C語言實(shí)現(xiàn)創(chuàng)意多彩貪吃蛇游戲

 更新時(shí)間:2022年08月17日 09:16:22   作者:微涼秋意  
這篇文章主要介紹了如何利用C語言實(shí)現(xiàn)一個(gè)創(chuàng)意多彩貪吃蛇游戲,這是一個(gè)純C語言外加easyx庫(kù)的繪圖函數(shù)制作而成的有趣小游戲,無需引入額外資源,感興趣的可以動(dòng)手嘗試一下

一、部分代碼截圖和游戲截圖

這里是部分代碼截圖,僅僅200行左右

這里是游戲截圖:

二、制作前的準(zhǔn)備工作

1、準(zhǔn)備開發(fā)環(huán)境

我使用的是Visual Stduio 2022easyx配合的開發(fā)環(huán)境:

1.首先在官網(wǎng)下載VS2022社區(qū)版

2.然后在 easyx官網(wǎng)下載EasyX

3.打開下載的Easyx軟件,他會(huì)自動(dòng)檢測(cè)你的VS版本,選擇對(duì)應(yīng)版本安裝即可

2、修改項(xiàng)目屬性

1.按照?qǐng)D示打開項(xiàng)目屬性頁(yè)

2.選擇高級(jí) ——字符集——改為多字節(jié)字符集——點(diǎn)擊確定

3.在C/C++常規(guī)里找到SDL檢查并設(shè)置為否

三、貪吃蛇游戲源碼

源碼如下:

/*
	項(xiàng)目名稱:貪吃蛇
	作者:	  微涼秋意
	開發(fā)環(huán)境:VS2022+easyx
*/
#include<time.h>		 //輔助生成隨機(jī)數(shù)種子
#include<stdio.h>		 //C語言標(biāo)準(zhǔn)輸入輸出庫(kù)
#include<conio.h>		 //鍵盤輸入
#include<graphics.h>	//easyx圖像庫(kù),提供函數(shù),繪圖和貼圖
#define MAX_SNAKE 500	//蛇的最大節(jié)數(shù)
#define WIN_WIDTH 640	//游戲窗口的寬度
#define WIN_HEIGHT 480  //游戲窗口的高度

//枚舉
enum Dir
{
	//枚舉,從上往下代表0,1,2,3
	UP,
	DOWN,
	LEFT,
	RIGHT
};
//食物結(jié)構(gòu)體
struct Food
{
	int x;
	int y;
	DWORD color;
	bool flag;	//是否被吃掉,決定是否重新生成
}food;
//蛇每個(gè)節(jié)點(diǎn)的位置和顏色
struct P 
{
	int x;
	int y;
	DWORD color;//DWORD是數(shù)據(jù)類型,可包含字符串
};
//設(shè)計(jì)蛇的結(jié)構(gòu)體
struct Snake         
{
	int num;	//當(dāng)前節(jié)數(shù)
	int dir;	//方向
	int score;	//得分
	int size;	//蛇的寬和高
	int speed;	//移動(dòng)速度
	struct P coor[MAX_SNAKE]; //表示每節(jié)蛇的坐標(biāo),數(shù)組表示
}snake;
//初始化游戲函數(shù)
void GameInit()
{
	//設(shè)置隨機(jī)數(shù)種子
	srand((unsigned int)time(NULL));
	snake.num = 3;
	snake.dir = RIGHT;//初識(shí)移動(dòng)方向?yàn)橛?
	snake.score = 0;
	snake.size = 10;
	snake.speed = 10;
	//初始化蛇有三個(gè)節(jié)點(diǎn)
	snake.coor[0].x = 320;
	snake.coor[0].y = 240;
	snake.coor[0].color = (RGB(rand()%256, rand() % 256, rand() % 256));//隨機(jī)生成顏色
	snake.coor[1].x = 310;
	snake.coor[1].y = 240;
	snake.coor[1].color = (RGB(rand()%256, rand() % 256, rand() % 256));//隨機(jī)生成顏色
	snake.coor[2].x = 300;
	snake.coor[2].y = 240;
	snake.coor[2].color = (RGB(rand()%256, rand() % 256, rand() % 256));//隨機(jī)生成顏色
	//初始化食物
	food.x = rand() % (WIN_WIDTH/10)*10;//這樣寫的目的是讓食物坐標(biāo)為10的倍數(shù)
	food.y = rand() % (WIN_HEIGHT/10)*10;
	food.color = RGB(rand() % 256, rand() % 256, rand() % 256);//隨機(jī)生成食物顏色
	food.flag = true;
}
//繪制游戲所需資源
void DrawGame()
{
	cleardevice();//刷新窗口
	//繪制蛇
	for (int i = 0; i < snake.num; i++) {
		//設(shè)置圖形填充顏色
		setfillcolor(snake.coor[i].color);
		//畫矩形
		fillrectangle(snake.coor[i].x, snake.coor[i].y, snake.coor[i].x + 10, snake.coor[i].y+10);
	}
	//繪制食物(橢圓)
	if (food.flag) {
		setfillcolor(food.color);
		solidellipse(food.x, food.y, food.x + 10, food.y + 10);
	}
	//繪制分?jǐn)?shù)
	char temp[20] = " ";
	sprintf(temp, "分?jǐn)?shù):%d", snake.score);
	outtextxy(10, 10, temp);//報(bào)錯(cuò)的話是因?yàn)樽址瘑栴}
	/*解決方案如下:
	* 1、打開項(xiàng)目屬性,把常規(guī)改為多字節(jié)
	* 2、打開項(xiàng)目屬性,C/C++常規(guī)設(shè)置里把SDL檢查關(guān)掉
	*/
}
//蛇移動(dòng)
void MoveSnake()
{
	//從尾部開始移動(dòng)
	for (int i =snake.num-1 ;i > 0;i--) {
		snake.coor[i].x = snake.coor[i - 1].x;
		snake.coor[i].y = snake.coor[i - 1].y;
	}
	switch (snake.dir) {
	case UP:
		snake.coor[0].y -= snake.speed;
		if (snake.coor[0].y < 0) {
			snake.coor[0].y = WIN_HEIGHT;
		}
		break;
	case DOWN:
		snake.coor[0].y += snake.speed;
		if (snake.coor[0].y > WIN_HEIGHT) {
			snake.coor[0].y = 0;
		}
		break;
	case LEFT:
		snake.coor[0].x -= snake.speed;
		if (snake.coor[0].x < 0) {
			snake.coor[0].x = WIN_WIDTH;
		}
		break;
	case RIGHT:
		snake.coor[0].x += snake.speed;
		if (snake.coor[0].x > WIN_WIDTH) {
			snake.coor[0].x = 0;
		}
		break;
	}
}
void GameControl()
{
	//獲取鍵盤輸入,_getch();不回顯函數(shù):
	char key = _getch();
	
	switch (key)
	{
	//72代表上,80代表下,75代表左,77代表右
	case 72:
		if (snake.dir!=DOWN)//如果正在往下,則不能掉頭往上
		{
			snake.dir = UP;
		}
		break;
	case 80:
		if (snake.dir != UP)//如果正在往上,則不能掉頭往下
		{
			snake.dir = DOWN;
		}
		break;
	case 75:
		if (snake.dir !=RIGHT)//如果正在往右,則不能掉頭往左
		{
			snake.dir = LEFT;
		}
		break;
	case 77:
		if (snake.dir != LEFT)//如果正在往左,則不能掉頭往右
		{
			snake.dir = RIGHT;
		}
		break;
	}
}
//吃食物
void CreatFood()
{
	if (!food.flag) {
		food.x = rand() % (WIN_WIDTH / 10) * 10;//這樣寫的目的是讓食物坐標(biāo)為10的倍數(shù)
		food.y = rand() % (WIN_HEIGHT / 10) * 10;
		food.color = RGB(rand() % 256, rand() % 256, rand() % 256);//隨機(jī)生成食物顏色
		food.flag = true;
	}
}
void EatFood()
{
	//食物存在且坐標(biāo)對(duì)應(yīng),吃掉后節(jié)數(shù)加一,食物變?yōu)椴淮嬖?
	if (food.flag && snake.coor[0].x == food.x && snake.coor[0].y == food.y)
	{
		food.flag = false;
		snake.num++;
		snake.score += 10;
		snake.coor[snake.num].color = food.color;
		CreatFood();
	}
}
int main(void)
{
	//1.創(chuàng)建窗口,initgraoh初始化 graphics 圖形窗口
	initgraph(WIN_WIDTH,WIN_HEIGHT);
	setbkcolor(RGB(190,190,190));//設(shè)置顏色
	cleardevice();				 //刷新窗口
	GameInit();				     //調(diào)用初始化

	while (1)
	{
		DrawGame();
		MoveSnake();
		if (_kbhit()) {
			//_kbhit檢測(cè)是否有鍵盤輸入
			GameControl();
		}
		EatFood();
		Sleep(75);
	} 
	getchar();//防止閃退
	return 0;
}

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

相關(guān)文章

  • C語言實(shí)現(xiàn)猜數(shù)字小游戲

    C語言實(shí)現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++的原生數(shù)組你了解多少

    C++的原生數(shù)組你了解多少

    這篇文章主要為大家詳細(xì)介紹了C++的原生數(shù)組,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++中關(guān)于Crt的內(nèi)存泄漏檢測(cè)的分析介紹

    C++中關(guān)于Crt的內(nèi)存泄漏檢測(cè)的分析介紹

    本篇文章介紹了,在C++中關(guān)于Crt的內(nèi)存泄漏檢測(cè)的分析說明。需要的朋友參考下
    2013-04-04
  • 純C語言實(shí)現(xiàn)火車售票系統(tǒng)

    純C語言實(shí)現(xiàn)火車售票系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了純C語言實(shí)現(xiàn)火車售票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++ 標(biāo)準(zhǔn)模板庫(kù) STL 順序容器詳解

    C++ 標(biāo)準(zhǔn)模板庫(kù) STL 順序容器詳解

    這篇文章主要介紹了C++ 標(biāo)準(zhǔn)模板庫(kù) STL 順序容器詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • 實(shí)現(xiàn)一個(gè)內(nèi)存池管理的類方法

    實(shí)現(xiàn)一個(gè)內(nèi)存池管理的類方法

    下面小編就為大家?guī)硪黄獙?shí)現(xiàn)一個(gè)內(nèi)存池管理的類方法。小編覺得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • 在C語言中轉(zhuǎn)換時(shí)間的基本方法介紹

    在C語言中轉(zhuǎn)換時(shí)間的基本方法介紹

    這篇文章主要介紹了在C語言中轉(zhuǎn)換時(shí)間的基本方法,分別是mktime()函數(shù)和localtime()函數(shù)的使用,需要的朋友可以參考下
    2015-08-08
  • Qt示例教程之用Qt畫一個(gè)溫度計(jì)

    Qt示例教程之用Qt畫一個(gè)溫度計(jì)

    在Qt繪圖中經(jīng)常需要繪制一些儀表的刻度盤,比如溫度計(jì),下面這篇文章主要給大家介紹了關(guān)于用Qt畫一個(gè)溫度計(jì)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • C++類和對(duì)象實(shí)戰(zhàn)之Date類的實(shí)現(xiàn)方法

    C++類和對(duì)象實(shí)戰(zhàn)之Date類的實(shí)現(xiàn)方法

    C++ 標(biāo)準(zhǔn)庫(kù)沒有提供所謂的日期類型,C++ 繼承了C語言用于日期和時(shí)間操作的結(jié)構(gòu)和函數(shù),這篇文章主要給大家介紹了C++類和對(duì)象實(shí)戰(zhàn)之Date類的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2021-12-12
  • C語言實(shí)現(xiàn)貪吃蛇游戲代碼

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

    大家好,本篇文章主要講的是C語言實(shí)現(xiàn)貪吃蛇游戲代碼,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02

最新評(píng)論