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

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

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

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

前言

控制臺的歡樂就是這么簡單;

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

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

1.用枚舉定義蛇的移動方向

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

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

```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.對窗口進行設(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ù)可以用來描繪無邊框填充函數(shù);
?? ?}
?? ?//繪制食物;
?? ?if (food.flag)
?? ?{
?? ??? ?solidcircle(food.x, food.y, food.r);//solidcircle代表畫圓;
?? ?}
?? ?EndBatchDraw();
}

3.對蛇進行初始化;

void GameInit()
{
?? ?//播放背景音樂;
?? ?mciSendString("open./mp3.music alias BGM", 0, 0, 0);
?? ?mciSendString("play BGM repeat", 0, 0, 0);
?? ?initgraph(640, 480 /*SHOWCONSOLE*/);
?? ?//設(shè)計隨機數(shù)種子;
?? ?srand(GetTickCount());//GetTickCount()獲取開機到現(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;//確保蛇在同一水品線;
?? ?}
?? ?//食物的初始化;隨機產(chǎn)生一個整數(shù);設(shè)置隨機種子,頭文件是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>//不是庫函數(shù);
#include<stdlib.h>//隨機數(shù)的產(chǎn)生;
#include<mmsystem.h>//導(dǎo)入背景音樂;
#pragma comment(lib,"winmm.lib")//導(dǎo)入背景音樂;
//結(jié)構(gòu)體對snake初始化.
#define SNAKE_SIZE 500
/*typedef struct tagpoint
{
?? ?LONG x;
?? ?LONG y;
}POINT;*/
//用枚舉表示蛇的方向;
enum Dir
{
?? ?UP,
?? ?DOWN,
?? ?LEFT,
?? ?RIGHT,//枚舉不能用分號;
};
//創(chuàng)建結(jié)構(gòu)體,對蛇的參數(shù)進行設(shè)置;
struct Snake
{
?? ?int size;//蛇的節(jié)數(shù);
?? ?int dir;//蛇的方向;
?? ?int speed;//蛇的移動速度;
?? ?//用數(shù)組來表示蛇的坐標;
?? ?POINT coor[SNAKE_SIZE];//蛇的最大節(jié)數(shù);
}snake;
//食物的結(jié)構(gòu)體;
struct Food
{
?? ?int x;
?? ?int y;
?? ?int r; ? //食物半徑;
?? ?bool flag;//用來判斷食物是否被吃;
?? ?DWORD color;//食物顏色;
}food;
//數(shù)據(jù)的初始化;
/*void GameInit()
{
?? ?//初始化graph圖形窗口,SHOWCONSOLE控制臺;
?? ?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()
{
?? ?//播放背景音樂;
?? ?mciSendString("open./mp3.music alias BGM", 0, 0, 0);
?? ?mciSendString("play BGM repeat", 0, 0, 0);
?? ?initgraph(640, 480 /*SHOWCONSOLE*/);
?? ?//設(shè)計隨機數(shù)種子;
?? ?srand(GetTickCount());//GetTickCount()獲取開機到現(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;//確保蛇在同一水品線;
?? ?}
?? ?//食物的初始化;隨機產(chǎn)生一個整數(shù);設(shè)置隨機種子,頭文件是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ù)可以用來描繪無邊框填充函數(shù);
?? ?}
?? ?//繪制食物;
?? ?if (food.flag)
?? ?{
?? ??? ?solidcircle(food.x, food.y, food.r);//solidcircle代表畫圓;
?? ?}
?? ?EndBatchDraw();
}
//蛇的移動;
//坐標的改變;
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;
?? ?}
}
//通過按鍵改變蛇的方向;
void KeyControl()
{
?? ?//判斷有沒有按鍵;
?? ?if (_kbhit())//檢測有沒有按鍵,如果有就返回真,否則返回假;
?? ?{
?? ??? ?//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);//時間延遲;
?? ?}
?? ?return 0;
}

利用學會的知識做點小游戲

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • c語言中的二級指針做函數(shù)參數(shù)說明

    c語言中的二級指針做函數(shù)參數(shù)說明

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

    C語言中#pragma?once的作用

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

    C++全排列中遞歸交換法實例詳解

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

    C語言循環(huán)隊列的表示與實現(xiàn)實例詳解

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

    C++中的智能指針舉例詳解及注意事項

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

    C++詳細實現(xiàn)紅黑樹流程詳解

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

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

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

    用C語言實現(xiàn)簡單的計算器功能

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

    深入了解C語言中的const和指針

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

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

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

最新評論

互助| 西贡区| 延川县| 甘泉县| 井冈山市| 长海县| 滨海县| 崇阳县| 长武县| 鄱阳县| 龙江县| 湟源县| 平遥县| 栾城县| 朝阳区| 含山县| 江陵县| 山阴县| 肇东市| 旌德县| 景宁| 宣武区| 漯河市| 涞源县| 监利县| 家居| 中卫市| 嵊泗县| 佛山市| 四子王旗| 无极县| 长春市| 天镇县| 穆棱市| 海林市| 石嘴山市| 鸡东县| 威宁| 亚东县| 弥勒县| 博客|