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

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

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

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

這里是部分代碼截圖,僅僅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軟件,他會自動檢測你的VS版本,選擇對應(yīng)版本安裝即可

2、修改項目屬性

1.按照圖示打開項目屬性頁

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

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

三、貪吃蛇游戲源碼

源碼如下:

/*
	項目名稱:貪吃蛇
	作者:	  微涼秋意
	開發(fā)環(huán)境:VS2022+easyx
*/
#include<time.h>		 //輔助生成隨機(jī)數(shù)種子
#include<stdio.h>		 //C語言標(biāo)準(zhǔn)輸入輸出庫
#include<conio.h>		 //鍵盤輸入
#include<graphics.h>	//easyx圖像庫,提供函數(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;
//蛇每個節(jié)點(diǎn)的位置和顏色
struct P 
{
	int x;
	int y;
	DWORD color;//DWORD是數(shù)據(jù)類型,可包含字符串
};
//設(shè)計蛇的結(jié)構(gòu)體
struct Snake         
{
	int num;	//當(dāng)前節(jié)數(shù)
	int dir;	//方向
	int score;	//得分
	int size;	//蛇的寬和高
	int speed;	//移動速度
	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;//初識移動方向為右
	snake.score = 0;
	snake.size = 10;
	snake.speed = 10;
	//初始化蛇有三個節(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);//報錯的話是因為字符集問題
	/*解決方案如下:
	* 1、打開項目屬性,把常規(guī)改為多字節(jié)
	* 2、打開項目屬性,C/C++常規(guī)設(shè)置里把SDL檢查關(guān)掉
	*/
}
//蛇移動
void MoveSnake()
{
	//從尾部開始移動
	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)對應(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檢測是否有鍵盤輸入
			GameControl();
		}
		EatFood();
		Sleep(75);
	} 
	getchar();//防止閃退
	return 0;
}

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

相關(guān)文章

  • C語言 TerminateProcess函數(shù)案例詳解

    C語言 TerminateProcess函數(shù)案例詳解

    這篇文章主要介紹了C語言 TerminateProcess函數(shù)案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言?隊列的實(shí)現(xiàn)全解析

    C語言?隊列的實(shí)現(xiàn)全解析

    隊列(Queue)與棧一樣,是一種線性存儲結(jié)構(gòu),它具有如下特點(diǎn):隊列中的數(shù)據(jù)元素遵循“先進(jìn)先出”(First?In?First?Out)的原則,簡稱FIFO結(jié)構(gòu)。在隊尾添加元素,在隊頭刪除元素
    2022-04-04
  • 深入理解C語言指針

    深入理解C語言指針

    關(guān)于指針,其是C語言的重點(diǎn),C語言學(xué)的好壞,其實(shí)就是指針學(xué)的好壞。其實(shí)指針并不復(fù)雜,學(xué)習(xí)指針,要正確的理解指針
    2020-02-02
  • C++獲得本機(jī)所有網(wǎng)卡的IP和MAC地址信息的實(shí)現(xiàn)方法

    C++獲得本機(jī)所有網(wǎng)卡的IP和MAC地址信息的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄狢++獲得本機(jī)所有網(wǎng)卡的IP和MAC地址信息的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • 關(guān)于C++虛函數(shù)與靜態(tài)、動態(tài)綁定的問題

    關(guān)于C++虛函數(shù)與靜態(tài)、動態(tài)綁定的問題

    這篇文章主要介紹了C++虛函數(shù)與靜態(tài)、動態(tài)綁定,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • C++的static靜態(tài)成員你有了解嗎

    C++的static靜態(tài)成員你有了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的static靜態(tài)成員,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C/C++實(shí)現(xiàn)動態(tài)數(shù)組的示例詳解

    C/C++實(shí)現(xiàn)動態(tài)數(shù)組的示例詳解

    動態(tài)數(shù)組相比于靜態(tài)數(shù)組具有更大的靈活性,因為其大小可以在運(yùn)行時根據(jù)程序的需要動態(tài)地進(jìn)行分配和調(diào)整,本文為大家介紹了C++實(shí)現(xiàn)動態(tài)數(shù)組的方法,需要的可以參考下
    2023-08-08
  • C++小游戲教程之猜數(shù)游戲的實(shí)現(xiàn)

    C++小游戲教程之猜數(shù)游戲的實(shí)現(xiàn)

    這篇文章主要和大家詳細(xì)介紹如何利用C++做一個簡易的猜數(shù)游戲,分為用戶猜數(shù)和系統(tǒng)猜數(shù)。文中的示例代碼講解詳細(xì) ,感興趣的小伙伴可以嘗試一下
    2022-11-11
  • 詳解QTreeWidget隱藏節(jié)點(diǎn)的兩種方式

    詳解QTreeWidget隱藏節(jié)點(diǎn)的兩種方式

    本文主要介紹了QTreeWidget隱藏節(jié)點(diǎn)的兩種方式,一種是直接隱藏,一種是間接隱藏,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解C語言動態(tài)內(nèi)存的分配

    詳解C語言動態(tài)內(nèi)存的分配

    這篇文章主要為大家介紹了C語言動態(tài)內(nèi)存的分配,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12

最新評論

郴州市| 桃源县| 蚌埠市| 晴隆县| 定陶县| 麦盖提县| 平乡县| 金塔县| 海晏县| 全椒县| 雅江县| 杭锦旗| 玉门市| 白城市| 隆子县| 安吉县| 宾阳县| 湄潭县| 阿拉尔市| 渝北区| 仁怀市| 呼图壁县| 龙游县| 七台河市| 红安县| 萝北县| 昭平县| 大足县| 肇庆市| 远安县| 汨罗市| 昭觉县| 玉门市| 柞水县| 张家口市| 揭阳市| 资源县| 沾化县| 明光市| 康平县| 新乡县|