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

使用C語(yǔ)言實(shí)現(xiàn)貪吃蛇小游戲

 更新時(shí)間:2022年07月25日 16:33:17   作者:心隨而動(dòng)  
這篇文章主要為大家詳細(xì)介紹了使用C語(yǔ)言實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)貪吃蛇小游戲的具體代碼,供大家參考,具體內(nèi)容如下

前言

控制臺(tái)的歡樂(lè)就是這么簡(jiǎn)單;

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、貪吃蛇實(shí)現(xiàn)的結(jié)構(gòu)和方式

1.用枚舉定義蛇的移動(dòng)方向

enum Dir
{
?? ?UP,
?? ?DOWN,
?? ?LEFT,
?? ?RIGHT,//枚舉不能用分號(hào);
};
//創(chuàng)建結(jié)構(gòu)體,對(duì)蛇的參數(shù)進(jìn)行設(shè)置;
struct Snake
{
?? ?int size;//蛇的節(jié)數(shù);
?? ?int dir;//蛇的方向;
?? ?int speed;//蛇的移動(dòng)速度;
?? ?//用數(shù)組來(lái)表示蛇的坐標(biāo);
?? ?POINT coor[SNAKE_SIZE];//蛇的最大節(jié)數(shù);
}snake;
//食物的結(jié)構(gòu)體;
struct Food
{
?? ?int x;
?? ?int y;
?? ?int r; ? //食物半徑;
?? ?bool flag;//用來(lái)判斷食物是否被吃;
?? ?DWORD color;//食物顏色;
}food;

# 2、使用步驟
## 1.引入庫(kù)
代碼如下(示例):

```c
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ?ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.對(duì)窗口進(jìn)行設(shè)置;

代碼如下(示例):

void GameDraw()
{
?? ?//雙緩沖繪圖;
?? ?BeginBatchDraw();
?? ?//設(shè)置背景顏色;
?? ?setbkcolor(RGB(28, 115, 119));
?? ?cleardevice();
?? ?//繪制蛇;
?? ?setfillcolor(GREEN);//顏色的改變;
?? ?for (int i = 0; i < snake.size; i++)
?? ?{
?? ??? ?solidcircle(snake.coor[i].x, snake.coor[i].y, 5);//solidcircle函數(shù)可以用來(lái)描繪無(wú)邊框填充函數(shù);
?? ?}
?? ?//繪制食物;
?? ?if (food.flag)
?? ?{
?? ??? ?solidcircle(food.x, food.y, food.r);//solidcircle代表畫(huà)圓;
?? ?}
?? ?EndBatchDraw();
}

3.對(duì)蛇進(jìn)行初始化;

void GameInit()
{
?? ?//播放背景音樂(lè);
?? ?mciSendString("open./mp3.music alias BGM", 0, 0, 0);
?? ?mciSendString("play BGM repeat", 0, 0, 0);
?? ?initgraph(640, 480 /*SHOWCONSOLE*/);
?? ?//設(shè)計(jì)隨機(jī)數(shù)種子;
?? ?srand(GetTickCount());//GetTickCount()獲取開(kāi)機(jī)到現(xiàn)在的毫秒數(shù);
?? ?snake.size = 3;
?? ?snake.speed = 10;
?? ?snake.dir = RIGHT;
?? ?for (int i = 0; i <= snake.size - 1; i++)
?? ?{
?? ??? ?snake.coor[i].x = 10 * (2 - i) + 20;//向右偏移;
?? ??? ?snake.coor[i].y = 10;//確保蛇在同一水品線;
?? ?}
?? ?//食物的初始化;隨機(jī)產(chǎn)生一個(gè)整數(shù);設(shè)置隨機(jī)種子,頭文件是stdlib.h;
?? ?food.x = rand() % 640;
?? ?food.y = rand() % 480;
?? ?food.color = RGB(rand() % 256, rand() % 256, rand() % 256);//顏色值為0到256;
?? ?food.r = rand() % 10 + 5;
?? ?food.flag = true;
}

二、源代碼

#include<stdio.h>
#include<conio.h>
#include<graphics.h>//不是庫(kù)函數(shù);
#include<stdlib.h>//隨機(jī)數(shù)的產(chǎn)生;
#include<mmsystem.h>//導(dǎo)入背景音樂(lè);
#pragma comment(lib,"winmm.lib")//導(dǎo)入背景音樂(lè);
//結(jié)構(gòu)體對(duì)snake初始化.
#define SNAKE_SIZE 500
/*typedef struct tagpoint
{
?? ?LONG x;
?? ?LONG y;
}POINT;*/
//用枚舉表示蛇的方向;
enum Dir
{
?? ?UP,
?? ?DOWN,
?? ?LEFT,
?? ?RIGHT,//枚舉不能用分號(hào);
};
//創(chuàng)建結(jié)構(gòu)體,對(duì)蛇的參數(shù)進(jìn)行設(shè)置;
struct Snake
{
?? ?int size;//蛇的節(jié)數(shù);
?? ?int dir;//蛇的方向;
?? ?int speed;//蛇的移動(dòng)速度;
?? ?//用數(shù)組來(lái)表示蛇的坐標(biāo);
?? ?POINT coor[SNAKE_SIZE];//蛇的最大節(jié)數(shù);
}snake;
//食物的結(jié)構(gòu)體;
struct Food
{
?? ?int x;
?? ?int y;
?? ?int r; ? //食物半徑;
?? ?bool flag;//用來(lái)判斷食物是否被吃;
?? ?DWORD color;//食物顏色;
}food;
//數(shù)據(jù)的初始化;
/*void GameInit()
{
?? ?//初始化graph圖形窗口,SHOWCONSOLE控制臺(tái);
?? ?initgraph(640, 480, SHOWCONSOLE);
?? ?snake.size = 0;
?? ?snake.speed = 10;
?? ?snake.dir;
?? ?snake.coor[0].x =10;
?? ?snake.coor[0].y = 10;
}*/
//數(shù)據(jù)的初始化;
void GameInit()
{
?? ?//播放背景音樂(lè);
?? ?mciSendString("open./mp3.music alias BGM", 0, 0, 0);
?? ?mciSendString("play BGM repeat", 0, 0, 0);
?? ?initgraph(640, 480 /*SHOWCONSOLE*/);
?? ?//設(shè)計(jì)隨機(jī)數(shù)種子;
?? ?srand(GetTickCount());//GetTickCount()獲取開(kāi)機(jī)到現(xiàn)在的毫秒數(shù);
?? ?snake.size = 3;
?? ?snake.speed = 10;
?? ?snake.dir = RIGHT;
?? ?for (int i = 0; i <= snake.size - 1; i++)
?? ?{
?? ??? ?snake.coor[i].x = 10 * (2 - i) + 20;//向右偏移;
?? ??? ?snake.coor[i].y = 10;//確保蛇在同一水品線;
?? ?}
?? ?//食物的初始化;隨機(jī)產(chǎn)生一個(gè)整數(shù);設(shè)置隨機(jī)種子,頭文件是stdlib.h;
?? ?food.x = rand() % 640;
?? ?food.y = rand() % 480;
?? ?food.color = RGB(rand() % 256, rand() % 256, rand() % 256);//顏色值為0到256;
?? ?food.r = rand() % 10 + 5;
?? ?food.flag = true;
}
//繪制;
void GameDraw()
{
?? ?//雙緩沖繪圖;
?? ?BeginBatchDraw();
?? ?//設(shè)置背景顏色;
?? ?setbkcolor(RGB(28, 115, 119));
?? ?cleardevice();
?? ?//繪制蛇;
?? ?setfillcolor(GREEN);//顏色的改變;
?? ?for (int i = 0; i < snake.size; i++)
?? ?{
?? ??? ?solidcircle(snake.coor[i].x, snake.coor[i].y, 5);//solidcircle函數(shù)可以用來(lái)描繪無(wú)邊框填充函數(shù);
?? ?}
?? ?//繪制食物;
?? ?if (food.flag)
?? ?{
?? ??? ?solidcircle(food.x, food.y, food.r);//solidcircle代表畫(huà)圓;
?? ?}
?? ?EndBatchDraw();
}
//蛇的移動(dòng);
//坐標(biāo)的改變;
void snakemove()
{
?? ?//讓頭部后面的跟著頭走;
?? ?for (int i = snake.size - 1; i > 0; i--)
?? ?{
?? ??? ?snake.coor[i] = snake.coor[i - 1];
?? ?}
?? ?switch (snake.dir)
?? ?{
?? ?case RIGHT:
?? ??? ?snake.coor[0].x += snake.speed;
?? ??? ?if (snake.coor[0].x - 10 >= 640)
?? ??? ?{
?? ??? ??? ?snake.coor[0].x = 0;
?? ??? ?}
?? ??? ?break;
?? ?case LEFT:
?? ??? ?snake.coor[0].x -= snake.speed;
?? ??? ?if (snake.coor[0].x + 10 <= 0)
?? ??? ?{
?? ??? ??? ?snake.coor[0].x = 640;
?? ??? ?}
?? ??? ?break;
?? ?case UP:
?? ??? ?snake.coor[0].y -= snake.speed;
?? ??? ?if (snake.coor[0].y + 10 <= 0)
?? ??? ?{
?? ??? ??? ?snake.coor[0].y = 480;
?? ??? ?}
?? ??? ?break;
?? ?case DOWN:
?? ??? ?snake.coor[0].y += snake.speed;
?? ??? ?if (snake.coor[0].y - 10 >= 480)
?? ??? ?{
?? ??? ??? ?snake.coor[0].y = 0;
?? ??? ?}
?? ??? ?break;
?? ?default:
?? ??? ?break;
?? ?}
}
//通過(guò)按鍵改變蛇的方向;
void KeyControl()
{
?? ?//判斷有沒(méi)有按鍵;
?? ?if (_kbhit())//檢測(cè)有沒(méi)有按鍵,如果有就返回真,否則返回假;
?? ?{
?? ??? ?//72 80 75 77上下左右鍵值;
?? ??? ?switch (_getch())
?? ??? ?{
?? ??? ?case 'w':
?? ??? ?case 'W':
?? ??? ?case 72:
?? ??? ??? ?if (snake.dir != DOWN)
?? ??? ??? ?{
?? ??? ??? ??? ?snake.dir = UP;
?? ??? ??? ?}
?? ??? ??? ?break;
?? ??? ?case 's':
?? ??? ?case 'S':
?? ??? ?case 80:
?? ??? ??? ?if (snake.dir != UP)
?? ??? ??? ?{
?? ??? ??? ??? ?snake.dir = DOWN;
?? ??? ??? ?}
?? ??? ??? ?break;
?? ??? ?case 'a':
?? ??? ?case 'A':
?? ??? ?case 75:
?? ??? ??? ?if (snake.dir != RIGHT)
?? ??? ??? ?{
?? ??? ??? ??? ?snake.dir = LEFT;
?? ??? ??? ?}
?? ??? ??? ?break;
?? ??? ?case 'd':
?? ??? ?case 'D':
?? ??? ?case 77:
?? ??? ??? ?if (snake.dir != LEFT)
?? ??? ??? ?{
?? ??? ??? ??? ?snake.dir = RIGHT;
?? ??? ??? ?}
?? ??? ??? ?break;
?? ??? ?case ' ':
?? ??? ??? ?while (1)
?? ??? ??? ?{
?? ??? ??? ??? ?if (_getch() == ' ');
?? ??? ??? ??? ?return;
?? ??? ??? ?}
?? ??? ??? ?break;
?? ??? ?}
?? ?}
}
//吃食物;
void EatFood()
{
?? ?if (food.flag && snake.coor[0].x >= food.x - food.r && snake.coor[0].x <= food.x + food.r && snake.coor[0].y <= food.y + food.r && snake.coor[0].y >= food.y - food.r)
?? ?{
?? ??? ?snake.size++;
?? ??? ?food.flag == false;
?? ?}
?? ?if (!food.flag)
?? ?{
?? ??? ?food.x = rand() % 640;
?? ??? ?food.y = rand() % 480;
?? ??? ?food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
?? ??? ?food.r = rand() % 10 + 5;
?? ??? ?food.flag = true;
?? ?}
}

int main()
{
?? ?//init初始化graph ;
?? ?initgraph(640, 480);
?? ?//設(shè)置背景顏色;
?? ?setbkcolor(RGB(28, 115, 119));//設(shè)置背景繪圖顏色;
?? ?cleardevice();
?? ?GameInit();
?? ?while (1)
?? ?{
?? ??? ?snakemove();
?? ??? ?GameDraw();
?? ??? ?KeyControl();
?? ??? ?EatFood();
?? ??? ?Sleep(80);//時(shí)間延遲;
?? ?}
?? ?return 0;
}

利用學(xué)會(huì)的知識(shí)做點(diǎn)小游戲

提示:這里對(duì)文章進(jìn)行總結(jié):
例如:以上就是今天要講的內(nèi)容,本文僅僅簡(jiǎn)單介紹了pandas的使用,而pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • c語(yǔ)言中的二級(jí)指針做函數(shù)參數(shù)說(shuō)明

    c語(yǔ)言中的二級(jí)指針做函數(shù)參數(shù)說(shuō)明

    這篇文章主要介紹了c語(yǔ)言中的二級(jí)指針做函數(shù)參數(shù)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • C語(yǔ)言中#pragma?once的作用

    C語(yǔ)言中#pragma?once的作用

    這篇文章主要介紹了C語(yǔ)言中#pragma?once的作用,pragma once 一般由編譯器提供保證,更多相關(guān)內(nèi)容在下面文章詳細(xì)展開(kāi)需要的小伙伴可以參考一下
    2022-05-05
  • C++全排列中遞歸交換法實(shí)例詳解

    C++全排列中遞歸交換法實(shí)例詳解

    在本篇文章里小編給各位整理的是關(guān)于C++全排列中遞歸交換法實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • C語(yǔ)言循環(huán)隊(duì)列的表示與實(shí)現(xiàn)實(shí)例詳解

    C語(yǔ)言循環(huán)隊(duì)列的表示與實(shí)現(xiàn)實(shí)例詳解

    這篇文章主要介紹了C語(yǔ)言循環(huán)隊(duì)列的表示與實(shí)現(xiàn),對(duì)于數(shù)據(jù)結(jié)構(gòu)與算法的研究很有幫助,需要的朋友可以參考下
    2014-07-07
  • C++中的智能指針舉例詳解及注意事項(xiàng)

    C++中的智能指針舉例詳解及注意事項(xiàng)

    智能指針是C++中用于管理動(dòng)態(tài)分配資源的強(qiáng)大工具,通過(guò)正確使用智能指針,可以顯著減少內(nèi)存泄漏的可能性,這篇文章主要介紹了C++中的智能指針舉例詳解及注意事項(xiàng)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • C++詳細(xì)實(shí)現(xiàn)紅黑樹(shù)流程詳解

    C++詳細(xì)實(shí)現(xiàn)紅黑樹(shù)流程詳解

    今天我要跟大家介紹二叉搜索樹(shù)中的另一顆樹(shù)——紅黑樹(shù),它主要是通過(guò)控制顏色來(lái)控制自身的平衡,但它的平衡沒(méi)有AVL樹(shù)的平衡那么嚴(yán)格
    2022-06-06
  • VS2019創(chuàng)建C++工程的的實(shí)現(xiàn)步驟

    VS2019創(chuàng)建C++工程的的實(shí)現(xiàn)步驟

    本文主要介紹了VS2019創(chuàng)建C++工程步驟,包含新建項(xiàng)目、編輯文件、配置源文件目錄、編譯鏈接、輸出文件、設(shè)置斷點(diǎn)調(diào)試,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • 用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能

    用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 深入了解C語(yǔ)言中的const和指針

    深入了解C語(yǔ)言中的const和指針

    這篇文章將具體為大家介紹一下C語(yǔ)言中const和指針的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)const和指針有一定幫助,需要的可以參考一下
    2022-02-02
  • 詳解C++編程中對(duì)于函數(shù)的基本使用

    詳解C++編程中對(duì)于函數(shù)的基本使用

    這篇文章主要介紹了詳解C++編程中對(duì)于函數(shù)的使用,包括函數(shù)的參數(shù)和返回值以及調(diào)用等基本的知識(shí)點(diǎn),需要的朋友可以參考下
    2015-09-09

最新評(píng)論

饶平县| 广丰县| 定州市| 溆浦县| 武宣县| 赤水市| 瑞安市| 牡丹江市| 固原市| 拉萨市| 岐山县| 大同县| 芮城县| 彰武县| 饶河县| 衡阳县| 涞源县| 鄂托克前旗| 连云港市| 五大连池市| 耒阳市| 临颍县| 克什克腾旗| 合江县| 和龙市| 德令哈市| 吉水县| 石阡县| 家居| 玉龙| 称多县| 凭祥市| 嵩明县| 德令哈市| 西和县| 保定市| 陵川县| 藁城市| 赫章县| 葫芦岛市| 南投县|