🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿
? ? ? ?🍟歡迎來到靜淵隱者的csdn博文,本文是c++游戲制作指南的一部🍟🍕更多文章請點擊下方鏈接🍕
🍨?c++游戲制作指南🍨
🍜專欄介紹:在這一專欄中,我將循循善誘,帶領你,在冷峻的控制臺上,種滿繽紛,一同走入c++控制臺游戲的殿堂。
🥨適宜人群:學習C++語言三個月及以上的愛好者,熟記基礎語法(選擇、循環兩大結構),掌握基礎算法(高精度、排序、模擬、貪心、搜索、動規等),知曉基礎數據結構(數組、字符串、鏈表、棧、隊列、樹、圖)。
🌭學習目的:能夠自主編寫出有趣的c++控制臺游戲,并掌握自學的方法。
🥞喜歡的朋友可以關注一下,下次更新不迷路
目錄
🥙前言
🥪一、存檔存什么?
①角色扮演游戲(RPG):
②動作游戲(ACT):
③策略游戲(SLG):
④射擊游戲(FPS):
⑤模擬游戲(SIM):
🌮二、fstream
①打開文件?
②關閉文件?
③讀寫文件
讀寫?
狀態標志符的驗證
🍔三、最終代碼
🍣四、參考資料
🥙前言
游戲中存檔的重要性不言而喻。
首先,存檔可以幫助玩家在游戲過程中遇到問題或失誤時恢復進度,避免重復操作,提高游戲體驗。其次,存檔可以記錄玩家的游戲歷程,幫助玩家回顧游戲過程,更好地理解游戲世界。
此外,有些游戲存在多個存檔點,如果每次重新開始游戲,會浪費大量時間和精力。因此,存檔對于玩家來說非常重要,可以讓玩家隨時隨地繼續游戲。
在游戲中,存檔的方式各不相同,有些游戲需要玩家手動存檔,而有些游戲則會自動存檔。但是,無論哪種方式,存檔的位置和方式都應該讓玩家明確,避免出現存檔無效或存檔丟失的情況。
總之,存檔是游戲中必不可少的一部分,對于玩家來說非常重要。存檔可以恢復游戲進度,記錄游戲歷程,提高游戲體驗,減少時間和精力的浪費。
因此,在玩游戲時,玩家都希望有個存檔。
🥪一、存檔存什么?
這一內容看似是廢話,實則非常重要。
舉幾個例子:
①角色扮演游戲(RPG):
a. 角色數據:游戲需要存儲每個角色的詳細信息,包括但不限于等級、技能、裝備、任務進度、角色屬性等。這些數據會隨著游戲的進行不斷更新和調整。
b. 地圖與劇情:游戲需要存儲游戲中的地圖設計、環境細節、劇情線、對話等元素。這些內容通常與角色數據相關聯,以提供豐富的游戲體驗。
c. 游戲進度:游戲需要存儲玩家的游戲進度,包括已完成的任務、獲得的獎勵、解鎖的關卡等。這將有助于在玩家下次游戲時恢復之前的進度。
②動作游戲(ACT):
a. 操作記錄:游戲需要存儲玩家的操作記錄,包括鍵盤、鼠標或游戲手柄的輸入。這些記錄有助于確認玩家的動作和決策。
b. 游戲進度:游戲需要存儲玩家的游戲進度,包括已完成的任務、獲得的獎勵、解鎖的關卡等。這將有助于在玩家下次游戲時恢復之前的進度。
c. 多人聯機數據:如果游戲支持多人聯機,則需要存儲玩家之間的連接和通信數據,包括網絡延遲、連接狀態等。這將確保游戲的流暢進行。
③策略游戲(SLG):
a. 策略信息:游戲需要存儲玩家的決策數據,包括但不限于資源分配、建筑升級、戰術選擇等。這些數據將有助于在玩家下次游戲時恢復之前的策略。
b. 游戲地圖:游戲需要存儲游戲中的地圖設計、環境細節、任務線、劇情等元素。這些內容將為玩家提供豐富的策略選擇和游戲體驗。
c. 游戲進度:游戲需要存儲玩家的游戲進度,包括已完成的任務、獲得的獎勵、解鎖的關卡等。這將有助于在玩家下次游戲時恢復之前的進度。
④射擊游戲(FPS):
a. 操作記錄:游戲需要存儲玩家的操作記錄,包括鍵盤、鼠標或游戲手柄的輸入。這些記錄有助于確認玩家的射擊和決策。
b. 游戲進度:游戲需要存儲玩家的游戲進度,包括已完成的任務、獲得的獎勵、解鎖的關卡等。這將有助于在玩家下次游戲時恢復之前的進度。
c. 多人聯機數據:如果游戲支持多人聯機,則需要存儲玩家之間的連接和通信數據,包括網絡延遲、連接狀態等。這將確保游戲的流暢進行。
⑤模擬游戲(SIM):
a. 模擬數據:游戲需要存儲大量的模擬數據,包括但不限于環境狀態、資源數量、人口規模、建筑狀態等。這些數據將反映游戲的實時狀態,并提供豐富的模擬體驗。
b. 游戲地圖:游戲需要存儲游戲中的地圖設計、環境細節、任務線、劇情等元素。這些內容將為玩家提供豐富的模擬環境和體驗。
c. 游戲進度:游戲需要存儲玩家的游戲進度,包括已完成的任務、獲得的獎勵、解鎖的關卡等。這將有助于在玩家下次游戲時恢復之前的進度。
總之,存檔的內容要是關乎游戲發展的重要信息。
🌮二、fstream
使用到的頭文件有:
?
fstream // 文件流
ifstream ?// 輸入文件流
ofstream ?// 輸出文件流
①打開文件?
在fstream類中,有一個成員函數open(),就是用來打開文件的,其原型是:?
void open(const char* filename,int mode,int access);?
參數:?
filename: 要打開的文件名?
mode: 要打開文件的方式?
access: 打開文件的屬性?
檢查是否成功打開成功:
//對ifstream、ofstream對象可用,fstream對象不可用。?
if (f)?
{//打開成功
}
if (f.good()) {...}// !運算符已經重載
if (!f)?
{//打開失敗
} ?
if (f.fail()) {...}
所以,在實際應用中,根據需要的不同,選擇不同的類來定義:如果想以輸入方式打開,就用ifstream來定義;如果想以輸出方式打開,就用ofstream來定義;如果想以輸入/輸出方式來打開,就用fstream來定
②關閉文件?
打開的文件使用完成后一定要關閉,fstream提供了成員函數close()來完成此操作。
如:file1.close(),就是把file1相連的文件關閉。?
③讀寫文件
讀寫?
這本有一些講究,但礙于這里并不是專門講解此函數,因此就只需照常輸入輸出(指cin/cout,scanf/print等基礎輸入輸出)即可(你應該知道存了那些東西,也清楚應讀出什么東西,并把那些東西放到哪里吧)
狀態標志符的驗證
bad()
如果在讀寫過程中出錯,返回 true 。例如:當我們要對一個不是打開為寫狀態的文件進行寫入時,或者我們要寫入的設備沒有剩余空間的時候。
fail()
除了與bad() 同樣的情況下會返回 true 以外,加上格式錯誤時也返回true ,例如當想要讀入一個整數,而獲得了一個字母的時候。
eof()
如果讀文件到達文件末尾,返回true。用于判斷是否讀完
good()
這是最通用的:如果調用以上任何一個函數返回true 的話,此函數返回 false 。
要想重置以上成員函數所檢查的狀態標志,你可以使用成員函數clear(),沒有參數。
🍔三、最終代碼
好了,現在看一看最終的代碼。
#include<iostream>
#include<fstream>
using namespace std;
#define FILENAME "文件的名字.txt"
void dudang()//讀檔
{cout<<"正在讀取存檔……";freopen("jisuan.txt","r",stdin);//這里各種輸入(像平常那樣讀入,cin,scanf()等) fclose(stdin);//關閉文件,然后就可以在控制臺上繼續輸出了 (就和平常一樣了) system("cls");
}
void cundang()//存檔
{cout<<"正在為你存檔……"<<endl;freopen("jisuan.txt","w",stdout);//這里各種輸出(像平常那樣讀入,cout,printf()等) fclose(stdout);//關閉文件,功效同上 system();
}
int main()
{fstream _file;_file.open(FILENAME, ios::in);//打開文件 if(!_file)//打開失敗,通常默認為沒有存檔 {}else{dudang();//存在文件,表示之前有玩過,讀檔 }
}
這是重中之重啊。
?
🍣四、參考資料
Fstream簡介
fstream詳解