日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于C语言的双人贪吃蛇游戏程序设计

發布時間:2023/12/14 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于C语言的双人贪吃蛇游戏程序设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于C語言的雙人貪吃蛇游戲程序設計

實現目標

制作一個兩個兩個人一起同時玩的雙人貪吃蛇游戲,有比分并記錄歷史成績
(1) 打開游戲時能夠自動播放背景音樂
(2) 開始菜單,顯示歷史用戶名及其對應的成績
(3) 開始菜單可以輸入兩人的用戶名
(4) P1 可以通過w,s,a,d來控制蛇1的移動
(5) P2 可以通過小鍵盤的“上,下,左,右”來控制蛇2的移動
(6) 食物在每次被吃后都會隨機出現在地圖
(7) 貪吃蛇吃到食物后長度會增加1
(8) 撞墻和撞到自己就會結束游戲,下一界面能夠輸出死因
(9) 隨著分數增加,蛇移動會越來越快
(10) 每一場的兩人的分數及用戶名都會被記錄

系統三大界面功能示意圖

函數功能設計

函數名函數功能
welcome打印開始界面
Finish打印結束界面,清空貪吃蛇結構占用的內存
creatgraph打印圍墻
gotoxy移動光標
color設置顏色
gotoprintboundary跳轉打印邊界
gotoprintsnake打印貪吃蛇結構
gotodelete跳轉刪除
creatsnake初始化蛇
creatfood產生食物
ClickControl獲取鍵盤信號
Judge判斷蛇是否死亡
MovingBody控制蛇的移動
Eating蛇吃到食物后的操作
ChangeBody1蛇1的坐標變換
ChangeBody2蛇2的坐標變換
record文件操作記錄成績
printrecord讀取文件,輸出成績

各函數調用關系如圖所示:

該程序中的數據結構與算法

  • 數據結構

  • 結構體:
  • struct Food {int x;int y; } food; //這是產生食物的結構體
  • 結構體數組:
  • typedef struct {char name[10];int score; } Rank;Rank rank[2]; //這是保存用戶名及其對應分數的結構體數組
  • 鏈表:
  • typedef struct Snakes {int x;int y;struct Snakes* next; } snake;snake* head; snake* head2; //本程序中兩條蛇的產生及控制均使用鏈表存儲
    • 算法

  • 文件輸入操作:
  • void record() {FILE *fp;fp = fopen("data.txt", "a");for (int i = 0; i < 2; i++){fprintf(fp, "%85s|%10d\n", (rank + i)->name, (rank + i)->score);}fclose(fp); } //這是創建文件,并且保存用戶的用戶名及相應的分數
  • 文件讀取操作:
  • int printrecord() {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);gotoxy(75, 15);printf("%10s|%10s\n", "玩家", "分數");FILE *pfile = fopen("data.txt", "rb");if (pfile == NULL) {return 0;}//讀取文件長度,讀完后把文件指針復位到開頭fseek(pfile, 0, SEEK_END);int file_length = ftell(pfile);rewind(pfile);//申請一段內存空間用來放文件中的文本內容,并置零int text_length = file_length * sizeof(char) + 1;char* text_buffer = (char*)malloc(text_length);memset(text_buffer, 0, text_length);//把文件文本內容讀到申請的內存空間中int read_length = fread(text_buffer, 1, file_length, pfile);if (read_length != file_length) {return 0;}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);//打印文件文本內容,釋放申請的內存空間,關閉文件流printf(text_buffer);free(text_buffer);fclose(pfile);return 0; } //這是讀取文件 用到了多種數據結構
  • 添加音效
  • #include <mmsystem.h> #pragma comment (lib, "winmm.lib") //分別使用這兩個頭文件和外部庫文件 PlaySound("music.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP); //使用PlaySound函數播放音樂
  • 使用了鏈表的尾插法操作
  • 函數流程圖舉例

    • 蛇移動函數的流程圖:
    • 判斷蛇是否死亡的流程圖:

    部分結構的測試案例

  • 左側提示輸入兩個人的用戶名,按空格確定。右側在第一次未創建成績文件是為空,不會輸出亂碼

  • 兩位玩家的“wasd”、“上下左右”都可以成功控制方向

  • 在輸出與蛇運動方向相反的按鍵時,蛇保持原來方向運動

  • 食物被吃后自動再生成,蛇邊長,并且分數增加顯示在下面

  • 蛇撞墻后死亡,顯示死因

  • 蛇撞到自己后死亡,顯示死因。

  • 在非第一次玩此游戲時,打開游戲會在右下角輸出歷史用戶及成績:

  • 宏定義、頭文件、全局變量及調用函數

    #include<stdio.h> #include<string.h> #include<windows.h> #include<time.h> #include<conio.h> #include <mmsystem.h> #pragma comment (lib, "winmm.lib")#define up 'w' #define down 's' #define left 'a' #define right 'd' /*地圖參數*/ #define height 26 #define wide 116void welcome(); // 開始界面 void Finish(int x); // 結束界面 void creatgraph(); // 圍墻打印 //*** void gotoxy(int x, int y); // 光標跳轉 void color(short x); void gotoprintboundary(int x, int y); // 跳轉打印邊界 void gotoprintsnake(int x, int y); //打印蛇 void gotodelete(int x, int y); // 跳轉刪除蛇 void creatsnake(); //*** void creatfood(); // 食物產生 int ClickControl(); // 獲取蛇1鍵盤信號 int Judge(); // 游戲結束判斷void MovingBody(); // 蛇的移動 void Eating(); // 蛇吃到東西后的操作(伸長) void ChangeBody(int x, int y); // 蛇的坐標變換 void ChangeBody2(int x, int y); void record(); //文件操作記錄成績 int printrecord(); //讀取文件,打印成績//蛇結構體 typedef struct Snakes {int x;int y;struct Snakes* next; } snake;snake* head; snake* head2; // 申明并定義食物 struct Food {int x;int y; } food; //用戶數據 typedef struct {char name[10];int score; } Rank;Rank rank[2];char click = 1; // 記錄敲下的鍵盤按鍵 char foreclick = 1;//鍵盤按鍵的歷史記錄值 char foreclick2 = 1; char click2 = 1; int speed; // 延遲的毫秒數

    源代碼下載

    下載鏈接如下:

    https://download.csdn.net/download/qq_25591221/14504516

    總結

    以上是生活随笔為你收集整理的基于C语言的双人贪吃蛇游戏程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。