999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

用C語言編寫英雄聯盟游戲

2020-07-27 12:10:17紀輝進
現代信息科技 2020年5期
關鍵詞:任務驅動情境教學游戲

摘? 要:游戲產業發展很快,不僅是學生,很多成年人都對游戲愛不釋手;C語言是實踐性很強的一門課程,讓學生用C語言編寫英雄聯盟游戲,相對于局限于教材的“填鴨式”“驗證式”教學而言,項目教學對學生更有吸引力,更能激發學生對學習動力,興趣愛好是最好的老師,學生玩著自己編寫的游戲,有利于其體會到成就感,對游戲功能的更高要求促使學生進行自主學習,自己一步步去實現。這樣能激發學生的學習熱情,積累項目經驗,達到提升學生實踐動手能力的目的。

關鍵詞:C語言;情境教學;任務驅動;項目案例;英雄聯盟;游戲

中圖分類號:TP311.1? ? ? 文獻標識碼:A 文章編號:2096-4706(2020)05-0069-03

Developing League of Legends Game with C Language

JI Huijin

(Department of Information Technology,Hubei Polytechnic Institute,Xiaogan? 432000,China)

Abstract:The development of the game industry is very fast and hot. Not only students,but also many adults cant let go of the game. C language is a very practical course. This paper introduces the game situation to let students write the League of Legends in C language. Compared with the teaching materials “cramming” and “verification” teaching,project-based teaching is more attractive to students and can stimulate students For learning motivation,interest and hobbies are the best teachers. Students play their own games,and their sense of achievement is expressed in words. The higher requirements for the function of the game inspire students to learn independently and realize step by step. This can stimulate studentsenthusiasm for learning,accumulate project experience,and improve studentspractical ability.

Keywords:C language;situational teaching;task driven;project cases;League of Legends(LOL);game

0? 引? 言

來自網絡的數據顯示,2018年電競游戲市場規模達417.9億元;中國教育部也將電競專業納入高等教育體系;2017年亞洲奧林匹克理事會將電子競技納入亞運會,2022年,電競將作為杭州亞運會的正式比賽項目。近年來電競游戲規模快速增長,給游戲開發產業注入無窮動力,游戲開發程序員缺口也越來越大;本文從游戲入手,培養學生的游戲編程思維和動手能力。

1? 項目背景

1.1? 開發環境

開發語言:C

開發工具:Visual Studio 2012/Visual C++6.0

1.2? 項目需求

《英雄聯盟》(簡稱LOL)是美國開發,在中國大陸地區由騰訊公司代理運營的英雄對戰類競技網游。游戲里擁有數百位各具特色,不同職業的英雄,游戲玩家首次登錄可以選擇扮演的英雄,通過打怪掙錢獲取裝備,也可以到商店購買武器和其他用品等,英雄之間還可以對戰。

本項目就是要模擬《英雄聯盟》游戲,編寫簡化版的英雄聯盟游戲;用戶首先輸入用戶名和密碼登錄,系統展示多名英雄角色供玩家選擇;選擇好扮演的角色后開始游戲,玩家選擇是進入商店購買商品還是到野外打怪升級;購買的商品可以是武器和藥水,不同的武器攻擊力和防御力不同,價格也有所差別,對戰時受到傷害會減少生命值和體力,不同的藥水功效不一樣,程序運行效果如圖1所示。

2? 數據模型

C語言中常用的數據類型有int、float、double、char,單獨的某一種數據類型都不能描述英雄、怪獸和藥品等,為了描述這些,我們必須采用結構體類型;英雄、怪獸和藥品都有多個備選,因此我們采用結構體數組作為程序數據模型;為了字符串初始化和輸出的便利,英雄、怪獸和藥品的名字采用基類型為char的指針更加方便。相關代碼如下:

struct Weapon

{//武器類型

char *name;//武器名

int attack;//攻擊力

int defence;//防御力

int price;//價格

};

struct Hero

{//英雄類型

char *name;//英雄名

struct Weapon weapon;

//英雄所持武器

int blood;//血量

int money;//金幣

};

struct Monst

{//怪獸類型

char *name;//怪名字

int attack;//攻擊力

int defence;//防御力

int blood;//血量

int money;//金幣

};

struct Good

{//商品類型

char *name;//商品名

int price;//價格

int attack;//加攻擊力

int defence;//加防御力

int blood;//加血量

};

為了降低程序復雜程度,我們把程序按照功能分成多個功能模塊,每個模塊的功能代碼封裝到一個函數中,為了在各函數都能正常訪問英雄、武器、怪獸和商品,需要將英雄、武器、怪獸和商品數組聲明為全局變量。相關代碼如下:

struct Hero heros[2],player;//英雄結構體數組,玩家

struct Weapon weapons[2];//武器結構體數組

struct Monst monsts[2],monst;//怪的結構體數組,隨機怪

struct Good goods[2];//藥

3? 核心代碼

3.1? 初始化英雄、武器、怪獸和藥品代碼

void loading()//初始化2種武器,2位英雄,2只怪獸,2種藥品,根據需要可初始化更多

{weapons[0].name="倚天劍";weapons[0].attack=28; weapons[0].defence=6;weapons[0].price=300;

weapons[1].name="屠龍刀"; weapons[1].attack=27; weapons[1].defence=8;weapons[1].price=400;

heros[0].name="周芷若";heros[0].weapon=weapons[0]; heros[0].blood=200;heros[0].money=300;

heros[1].name="張無忌";heros[1].weapon=weapons[1]; heros[1].blood=300;heros[1].money=100;

monsts[0].name="貓妖";monsts[0].attack=8;monsts[0].defence=4;monsts[0].blood=50; monsts[0].money=50;

monsts[1].name="狼妖";monsts[1].attack=12;monsts[1].defence=7; monsts[1].blood=90;monsts[1].money= 250;

goods[0].name="金創藥";goods[0].price=100;goods[0].attack=0;goods[0].defence=0;goods[0].blood=150;

goods[1].name="云南藥";goods[1].price=200;goods[1].attack=0;goods[1].defence=0;goods[1].blood=250;}

3.2? 登錄模塊代碼

登錄時玩家根據提示輸入用戶名和密碼,用戶名和密碼輸入正確,程序進入下一環節;輸入錯誤需要重新輸入,直到用戶名和密碼都正確才進入后續流程。這里的登錄賬號和密碼由軟件內置,采用整型數據表示。也可以采用字符串表示,那么在核對用戶名和密碼是否正確時就需要用到strcmp函數,由于篇幅限制不在此贅述。相關代碼如下:

void login(){

int username,password; do{

printf("請輸入賬號:");scanf("%d",&username);printf("請輸入密碼:"); scanf("%d",&password);

if(username!=123||password!=123)printf("賬號或密碼輸入錯誤,請重新輸入!\n");

}while(username!=123||password!=123);}

3.3? 選擇扮演角色模塊代碼

當游戲開始時,玩家可根據系統提示選擇扮演的角色。相關代碼如下:

void cosplay(){//程序列出各英雄姓名,武器,攻擊力等信息,備玩家選擇

int i,select; printf("序號\t姓名\t武器\t攻擊力\t防御力\t價格\t血量\t金幣\n");

for(i=0;i<2;i++) {

printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n",i+1, heros[i].name,heros[i].weapon.name,heros[i].weapon.attack, heros[i].weapon.defence,heros[i].weapon.price,heros[i].blood, heros[i].money);}

printf("請選擇扮演角色:"); scanf("%d",&select); player=heros[select-1];}

3.4? 購買商品模塊代碼

由于篇幅這里只羅列出兩種藥品供購買,若有需要,也可以初始化和羅列更多藥品和武器以供選擇;在購買商品的時候,如果玩家金錢足夠,完成交易后可根據購買物品的屬性對玩家對應屬性進行增幅提升,例如購買了武器,玩家手持的武器會發生變化,武器的攻擊力也會發生變化;如果購買了藥品,恢復體力的藥水會增加玩家體力,恢復血量的藥水會增加玩家血量;如果玩家金錢不夠則無法完成交易,系統會提示玩家打怪掙錢后再來購買。相關代碼如下:

void shopping(){int i,select; printf("序號\t商品名\t單價\t攻擊\t防御\t血\n");

for(i=0;i<2;i++) {

printf("%d\t%s\t%d\t%d\t%d\t%d\n",i+1,goods[i].name,goods[i].price,goods[i].attack,goods[i].defence,goods[i].blood); }

printf("請輸入要購買商品的序號:"); scanf("%d",&select); select--;//1,2

if(select>=0&&select<2) {

if(player.money>=goods[select].price)//買得起

{player.money=player.money-goods[select].price;

player.weapon.attack=player.weapon.attack+goods[select].attack;

player.weapon.defence=player.weapon.defence+goods [select].defence;

player.blood=player.blood+goods[select].blood;

printf("你購買了%s,%d金幣,攻擊力提升%d點,防御力提升%d點,血量提升%d點!\n",goods[select].name,goods [select].price,goods[select].attack,goods[select].defence,goods[select].blood); } else //買不起

{ printf("窮鬼,打怪掙錢去吧,這個地方不適合你!\ n"); }}}

3.5? 戰斗模塊代碼

前面初始化了幾只怪獸,玩家在野外遇到的怪獸隨機;跟怪獸戰斗采用的是對戰模式,即玩家攻擊怪獸后怪獸如果沒死會還手,還手時英雄血量會降低。相關代碼如下:

void fitting(){ int r,hurt; srand((unsigned)time (NULL)); r=rand()%2; monst=monsts[r];

printf("你在野外遭遇到了%s\n",monst.name);

while(player.blood>0&&monst.blood>0) {//英雄先動手

hurt=player.weapon.attack-monst.defence;if(hurt<= monst.blood)//扛得住

{printf("%s對%s發起了攻擊,造成%d點傷害,%s的血量變為%d點\n",player.name,monst.name,hurt,monst.name, monst.blood-hurt);monst.blood=monst.blood-hurt; }else //扛不住

{printf("%s對%s發起了攻擊,造成%d點傷害,%s的血量變為0,%s死亡!\n",player.name,monst.name,monst.blood, monst.name,monst.name); monst.blood=0; }

//怪還手

if(monst.blood>0)

{hurt=monst.attack-player.weapon.defence;if(hurt< player.blood)

{printf("%s對%s發起了攻擊,造成%d點傷害,%s的血量變為%d點\n",monst.name,player.name,hurt,player.name, player.blood-hurt);player.blood=player.blood-hurt;} else {printf ("%s對%s發起了攻擊,造成%d點傷害,%s的血量變為0,%s死亡!\n",monst.name,player.name,player.blood,player.name, player.name); player.blood=0; }}}

if(player.blood>0){ player.money=player.money+ monst.money;

printf("%s勝利,得到%d金幣,%s擁有%d金幣!\n", player.name,monst.money,player.name,player.money); }

else printf("%s死亡,游戲結束!\n",player.name);}

3.6? 新手村模塊代碼

玩家登錄系統后即進入新手村,可以選擇購買裝備或出村打怪練級。相關代碼如下:

void newcountryside(){

int choose; printf("*******歡迎%s進入新手村***** ***\n",player.name); do{

printf("1.購物\n2.出村打怪\n"); scanf("%d",&choose); switch(choose) {

case 1:shopping();break; case 2:fitting();break; } }while(player.blood>0);}

4? 結? 論

本游戲案例非常生活化,富有趣味性,把真實的游戲情境引入課程項目教學中,該項目用到了C語言的if-else流程控制結構,以及變量的聲明、賦值和引用;數組的聲明,賦值和引用;結構體和結構體數組;輸入輸出函數的用法;取隨機數函數的用法;for循環的使用及遍歷數組;函數的定義和調用;指針的用法;對于學有余力的學生,可以在上述功能之外采用C語言中文件的知識,用來實現游戲的存檔、讀檔功能;另外還可以增加更多的英雄、武器、藥品等,對游戲功能進行擴展,讓游戲更具可玩性和趣味性。

本案例代碼總共200多行,邏輯嚴密,代碼規模適中,自己玩自己編寫的游戲,學生會更有成就感,對增強學生的學習動力、提高其動手能力大有幫助;提升了學生的邏輯思維能力,該案例的項目經驗,為學習后續的軟件編程課程奠定了一個良好且穩固的基礎。該案例將復雜問題簡化,化腐朽為神奇,讓學生在學中玩,在玩中學,激發學習編程的興趣,提升了編程的樂趣,提高了學生解決實際問題的能力,積累項目經驗,可以算得上C語言程序課程教學的一個經典案例。

參考文獻:

[1] 譚浩強.C程序設計:第五版 [M].北京:清華大學出版社,2017.

[2] 本·克萊蒙.C程序設計新思維:第2版 [M].趙巖,譯.北京:人民郵電出版社,2018.

[3] 王亮.《C語言程序設計》循環結構教學案例研究 [J].科技視界,2018(1):60-61.

[4] 竇祥國.面向計算思維培養的高職C程序設計案例教學研究 [J].中國職業技術教育,2019(32):93-96.

[5] 李敏.以培養計算思維為主的C程序設計課程教學改革 [J].電腦知識與技術,2019,15(12):111-112.

[6] 高歡.自主學習模式下微課在高校教學中的實踐研究 [D].河北:河北師范大學,2019.

作者簡介:紀輝進(1977-),男,漢族,湖北黃陂人,講師,本科,主要研究方向:軟件技術教學。

猜你喜歡
任務驅動情境教學游戲
數獨游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
高職酒店管理專業情境教學模式探究
任務驅動式教學模式在電子技術課程中的應用
職業(2016年10期)2016-10-20 22:18:22
任務驅動教學法在《網絡應用服務管理》教學中的應用
淺析情境教學法在中職會計課堂中的應用價值
考試周刊(2016年79期)2016-10-13 23:33:50
任務驅動, 啟發學生自學
考試周刊(2016年76期)2016-10-09 09:06:52
淺談語文課堂閱讀教學
英語情境教學中的問題探析
成才之路(2016年25期)2016-10-08 10:48:46
任務驅動教學法在中職信息技術教學中的運用
成才之路(2016年25期)2016-10-08 10:23:55
主站蜘蛛池模板: 国产欧美日韩视频怡春院| 亚洲色无码专线精品观看| 黄色一及毛片| 大香伊人久久| 欧美激情第一欧美在线| 午夜久久影院| 精品国产成人av免费| 久久久久国产精品嫩草影院| 人妻无码一区二区视频| 一本大道香蕉久中文在线播放| 美女无遮挡免费网站| 久久国产精品影院| 国产在线观看一区精品| 色综合色国产热无码一| 蜜臀AV在线播放| 亚洲黄色高清| 麻豆AV网站免费进入| 国产黑丝视频在线观看| 久久人搡人人玩人妻精品 | 女同国产精品一区二区| 一本久道久久综合多人| 中文字幕免费在线视频| 国产美女免费| 国产啪在线| 亚洲成a人片在线观看88| 另类重口100页在线播放| 亚洲三级网站| 在线观看免费国产| 成人免费视频一区二区三区| 精品久久777| 人妻中文久热无码丝袜| 国产无码精品在线播放| 亚洲精品国产自在现线最新| 亚洲欧美自拍中文| 国产麻豆va精品视频| 国产又爽又黄无遮挡免费观看| 露脸一二三区国语对白| 精品久久久无码专区中文字幕| www.91在线播放| 亚洲精品无码av中文字幕| 久久综合干| 亚洲天堂在线免费| 国产不卡在线看| www.亚洲色图.com| 在线国产91| 国产 日韩 欧美 第二页| 欧美不卡视频一区发布| 国产精品片在线观看手机版 | 欧美yw精品日本国产精品| 国产福利在线免费| 国产精品欧美激情| 欧美成人国产| 欧美三级自拍| 久久大香香蕉国产免费网站| 国产成人免费观看在线视频| 亚洲欧美不卡| 国产Av无码精品色午夜| 欧美一区二区三区欧美日韩亚洲| 2021天堂在线亚洲精品专区| 无码日韩精品91超碰| 国产99久久亚洲综合精品西瓜tv| 无码精品福利一区二区三区| 国产99久久亚洲综合精品西瓜tv| 无码免费视频| 久久国产乱子| 一区二区三区成人| 欧美成人手机在线视频| 91最新精品视频发布页| 国产精品视频第一专区| 亚洲av无码牛牛影视在线二区| 精品1区2区3区| 成人国产小视频| 国产91特黄特色A级毛片| 老司机久久精品视频| 婷婷色中文| 九色91在线视频| 老色鬼久久亚洲AV综合| 欧美丝袜高跟鞋一区二区| 高h视频在线| 国产偷倩视频| 国产在线91在线电影| 热思思久久免费视频|