C++純C實現貪吃蛇小游戲

公眾號:編程驛站

#include <stdio.h>
#include <windows.h>
#include  <stdlib.h>
#include <time.h>//描述蛇的節點信息
typedef struct SnakeNode
{int x;int y;
} Snode;//箱子:放置蛇的所有節點
Snode snakes[100];
//保存用戶選擇的方向
char dir='l'; // u d l r
//保存食物
Snode food;
//蛇身有效長度
int size=5;
//速度
int speed=300;
//保存計分
int count=0;/**
自定義一個功能函數:給我一個坐標,我就能夠把你定位
*/
void setPosition(int x,int y)
{COORD point;point.X=x;point.Y=y;//重置坐標SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),point);
}/**
顯示友好的游戲界面
*/
void wellcome()
{setPosition(30,10);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),9);printf("歡迎來到貪吃蛇的世界!");setPosition(30,15);//暫停system("pause");//清屏createFoodsystem("cls");//輸出操作提示setPosition(30,10);printf("使用向上、向下、向左、向右的方向鍵控制蛇的方向");setPosition(30,11);system("pause");system("cls");
}/*
功能模塊:繪制圍墻 1B=8bit A:1B 中文:2B
*/
void paintWall()
{int index=0;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);//上邊。下邊for(index=0; index<58; index=index+2){setPosition(index,0);printf("■");setPosition(index,26);printf("■");}//左邊、右邊akes[0].x=oldX+2;for(index=1; index<=26; index++){setPosition(0,index);printf("■");setPosition(56,index);printf("■");}srand(time(0));int x=rand()%54+2;int y=rand()%24+1;int l=4;for(index=0;index<l;index++){setPosition(x,y);printf("■");x=x+2;}
}/*檢查新生成的食物的坐標是否和蛇身重合
*/
int isTogether(int x,int y)
{int index=0;for(index=0; index<size; index++){if(snakes[index].x==x && snakes[index].y==y){//重合return 1;}}//沒有重合return 0;
}/*
創建食物
*/
void createFood()
{//隨機數字//隨機種子int randX=0;int randY=0;srand(time(0));//食物坐標隨機randY=rand()%24+1;do{//只是能偶數randX=rand()%54+2;//檢查是否和蛇身重合}while(!(randX%2==0  && isTogether(randX,randY)==0)) ;food.x=randX;food.y=randY;setPosition(food.x,food.y);printf("■");
}/*
顯示蛇:節點 蛇頭 5節點
*/
void initSnake()
{//蛇的節點起點位置int x=24;int y=5;int index=0;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),8);//輸出5個節點for(index=0; index<size; index++, x=x+2){//設置節點的坐標snakes[index].x=x;snakes[index].y=y;setPosition(snakes[index].x,snakes[index].y);printf("■");}
}/*
清除蛇身圖形
*/
void clearSnake()
{int index=0;for(index=0; index<size; index++){setPosition(snakes[index].x,snakes[index].y);printf("  ");}
}/*
解析用戶的按鍵,改變方向值
*/
void selDir()
{if(GetAsyncKeyState(VK_UP) && dir!='d' ){dir='u';}else if(GetAsyncKeyState(VK_DOWN) && dir!='u' ){dir='d';}else if(GetAsyncKeyState(VK_LEFT) && dir!='r'){dir='l';}else if(GetAsyncKeyState(VK_RIGHT) && dir!='l'){dir='r';}
}/*
移動蛇
*/
void moveSnake()
{//蛇頭的原來坐標int oldX=snakes[0].x;int oldY=snakes[0].y;//兩個臨時變量int tempX=0;int tempY=0;int index=0;//重置一個新坐標switch(dir){case 'u':snakes[0].x=oldX;snakes[0].y=oldY-1;break;case 'd':snakes[0].x=oldX;snakes[0].y=oldY+1;break;case 'l':snakes[0].x=oldX-2;snakes[0].y=oldY;break;case 'r':snakes[0].x=oldX+2;snakes[0].y=oldY;break;}//檢查蛇頭是否和食物重合if(snakes[0].x==food.x && snakes[0].y==food.y){size++;createFood();//計分count=count+20;setPosition(60,10);printf("當前計分%d",count);speed-=50;if(speed<100){speed=100;}}//檢查蛇頭是否碰到墻if( snakes[0].x<=2 || snakes[0].x>54 || snakes[0].y<1 || snakes[0].y>25  ){//碰到墻system("cls");printf("gameover");system("pause");exit(0);}//自己吃自己for(index=1; index<size; index++){if(snakes[0].x==snakes[index].x && snakes[0].y==snakes[index].y){
//碰到墻system("cls");printf("gameover");system("pause");exit(0);}}setPosition(snakes[0].x,snakes[0].y);printf("■");//移動除了蛇頭之外的節點for(index=1; index<size; index++){//在移動節點之前保存節點的坐標tempX=snakes[index].x;tempY=snakes[index].y;//重新指定新坐標,前一個節點留下的空白snakes[index].x=oldX;snakes[index].y=oldY;//指定光標點setPosition(snakes[index].x,snakes[index].y);printf("■");//重置原坐標oldX=tempX;oldY=tempY;}
}//主函數:語法結構(固定)運行時候,起點
int main()
{wellcome();//繪制圍墻paintWall();initSnake();createFood();//清除蛇原來的圖形while(1){selDir();clearSnake();moveSnake();Sleep(speed);}return 0;
}```

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10288.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10288.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10288.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

滲透思考題

一&#xff0c;嘗試登錄。 客戶端對密碼進行哈希處理并緩存密碼hash&#xff0c;丟棄實際的明文密碼&#xff0c;然后將用戶名發送到服務器&#xff0c;發起認證請求 密文存儲位置&#xff1a;數據庫文件位于C:WindowsSystem32configsam&#xff0c;同時掛載在注冊表中的HKLMSA…

C語言【文件操作 1】

文章目錄 1.為什么使用文件2.文件是什么&#xff1f;2.1程序文件2.2數據文件 3.二進制文件和文本文件4.文件的打開和關閉4.1流和標準流流標準流 4.2文件指針4.3文件的打開和關閉 結語 1.為什么使用文件 很簡單 長久的存儲數據 如果沒有文件&#xff0c;我們寫程序所產生的數據…

商米-android-使用NFC讀IC卡,身份證云解和IC卡同時兼容

商米介紹地址&#xff1a;https://www.sunmi.com/ 商米是一個提供手持PDA的一個很好的解決方案廠商&#xff0c; 也有其他的一些桌面設備。 其中商米提供的軟件服務中&#xff0c;比較特別的是 身份證云解功能。 此處重點說明一下&#xff0c;身份證云解功能。 以往市面上的身…

Vue學習JSON.stringify()將Object類型轉換成String類型

Vue學習JSON.stringify&#xff08;&#xff09;將Object類型轉換成String類型 一、前言1、基本用法2、復雜對象轉換3、過濾器函數4、序列化函數 一、前言 JSON.stringify() 是一個 JavaScript 函數&#xff0c;用于將 JavaScript 值轉換為 JSON 字符串。它接受一個 JavaScrip…

深入探索MySQL視圖

前言 在數據庫的世界里&#xff0c;MySQL視圖作為數據抽象的一把利劍&#xff0c;為我們提供了一種靈活而高效的方式來管理和查詢數據。它不僅能夠簡化復雜的查詢邏輯&#xff0c;還能在不改動底層數據結構的前提下&#xff0c;實現數據的定制化展示與訪問控制。本文旨在深入解…

【小紅書采集工具】根據搜索關鍵詞批量采集小紅書筆記,含筆記正文、筆記鏈接、發布時間、轉評贊藏等

一、背景介紹 1.1 爬取目標 熟悉我的小伙伴都了解&#xff0c;我之前開發過2款軟件&#xff1a; 【GUI軟件】小紅書搜索結果批量采集&#xff0c;支持多個關鍵詞同時抓取&#xff01; 【GUI軟件】小紅書詳情數據批量采集&#xff0c;含筆記內容、轉評贊藏等&#xff0c;支持…

【C++】string類的使用①(默認成員函數 || 迭代器接口begin,end,rbegin和rend)

&#x1f525;個人主頁&#xff1a; Forcible Bug Maker &#x1f525;專欄&#xff1a; STL || C 目錄 前言&#x1f308;關于string類&#x1f308;string類的成員函數&#x1f525;默認成員函數string類對象的構造(constructor)string類對象的析構string類對象的賦值運算符…

NPOI生成word浮動圖標

1、NPOI版本2.7.0, net框架4.8 2、安裝OpenXMLSDKToolV25.msi 3、先創建一個word文檔&#xff0c;并設置圖片為浮于文字之上 4、OpenXML顯示的結果 5、實際代碼如下&#xff1a; public class GenerateWordDemo {public GenerateWordDemo(){}//https://blog.fileformat.co…

js由那三部分組成

JavaScript 主要由三部分組成&#xff1a;ECMAScript、DOM&#xff08;文檔對象模型&#xff09;和 BOM&#xff08;瀏覽器對象模型&#xff09;。 1、ECMAScript ECMAScript 是 JavaScript 的核心&#xff0c;描述了語言的基本語法&#xff08;變量、函數、條件語句、循環、…

前端筆記-day03

文章目錄 01-初始CSS02-CSS引入方式03-標簽選擇器04-類選擇器05-id選擇器06-通配符選擇器07-畫盒子08-字體大小09-文字粗細10-字體傾斜11-行高12-行高垂直居中13-字體族14-font復合屬性15-文本縮進16-文本對齊方式17-圖片對齊方式18-文本修飾線19-文字顏色20-調試工具21-綜合案…

Dual Aggregation Transformer for Image Super-Resolution論文總結

題目&#xff1a;Dual Aggregation Transformer&#xff08;雙聚合Transformer&#xff09; for Image Super-Resolution&#xff08;圖像超分辨&#xff09; 論文&#xff08;ICCV&#xff09;&#xff1a;Chen_Dual_Aggregation_Transformer_for_Image_Super-Resolution_ICCV…

IM 是什么?

在當今數字化的時代&#xff0c;即時通訊&#xff08;IM&#xff09;已經滲透到人們的日常生活和企業的工作環境中。IM技術的快速i發展為人們提供了一種高效、便捷的溝通方式&#xff0c;不僅推動了社會的信息化進程&#xff0c;也提升了企業的協同效率和競爭力。 作為企業級I…

【GD32】01-GPIO通用輸入輸出

GD32 閑話說在前頭 這里又開一個系列啦。 原因就是之前買了立創開發板的9.9的GD32E230C8T6的板子&#xff0c;買都買了就跟著立創開發板學習一下&#xff08;屬于是一次性支持了兩個國產品牌了&#xff0c;立創和兆易創新&#xff09;。并且我還買了GD32F407VET6的板子&…

資金流分析下的企業供貨關系強度模型

圖技術 利用neo4j、networkx、dgl、python做圖分析挖掘 【1】最短路徑算法dijkstra 【2】基于networkx的隱性集團關系識別模型 【3】基于Neo4j的擔保社群型態分析挖掘 【4】基于python求有向無環圖中target到其他節點全路徑 【5】有向圖中任意兩點的路徑 【6】圖基礎入門 【7】…

項目管理中控制質量的工具與技術

項目管理中控制質量的工具與技術 控制質量的工具與技術包括多種方法&#xff0c;旨在確保產品或服務達到既定的質量標準。關于具體的工具格式和樣式&#xff0c;以下是一些示例&#xff1a; 統計技術&#xff1a; 這是一種將質量控制要素的數據轉化為實際控制手段的技術。通…

Visual Studio和Visual Studio Code適用于哪些編程語言

Visual Studio和Visual Studio Code都適用于多種編程語言&#xff0c;它們的適用編程語言如下&#xff1a; Visual Studio適用于&#xff1a; C#Visual Basic .NETF#CJavaScriptTypeScriptPythonHTML/CSSJava&#xff08;通過插件支持&#xff09; Visual Studio Code適用于…

Jtti:哪些方法可以降低美國CN2服務器的延遲?

降低美國CN2服務器的延遲可以采取多種方法&#xff0c;以下是一些常用的方法&#xff1a; 1.選擇優質的網絡提供商和服務商&#xff1a;選擇具有高質量網絡和優質服務的網絡提供商和服務商是降低延遲的關鍵。確保您選擇的網絡提供商具有可靠的基礎設施和優質的網絡連接&#xf…

C++:關于圓形魚眼半全景圖轉為等距圓柱投影圖

C&#xff1a;空間坐標映射到球面坐標/全景圖_如何將球體坐標映射到球面uv-CSDN博客 C&#xff1a;關于360全景圖像和立方體6面全景圖像的相互轉換_彩色全景拆解正方體6個面-CSDN博客 之前記錄了立方體和360全景之間的轉換&#xff0c;這次記錄下魚眼圖與360全景圖之間的轉換…

C++ STL的鎖介紹

在 C Standard Template Library (STL) 中&#xff0c;有幾個鎖的實現&#xff0c;這些都位于 <mutex> 頭文件。以下是一些常見的鎖及其功能&#xff1a; std::mutex&#xff1a;最基本的互斥鎖&#xff0c;不可遞歸使用。該鎖提供了獨占的非公平鎖定能力。 std::mutex…

處理瀏覽器緩存問題

處理瀏覽器緩存問題 main.js router.onError((error) > {hasRefreshed false;console.log("異常" error.message);let ind0 error.message.indexOf(Loading chunk chunk-)let ind2 error.message.indexOf(failed.)if(ind0 ! -1 && ind2 !-1){console.…