亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        用C語言編寫英雄聯(lián)盟游戲

        2020-07-27 12:10:17紀(jì)輝進(jìn)
        現(xiàn)代信息科技 2020年5期
        關(guān)鍵詞:英雄聯(lián)盟任務(wù)驅(qū)動情境教學(xué)

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

        關(guān)鍵詞:C語言;情境教學(xué);任務(wù)驅(qū)動;項(xiàng)目案例;英雄聯(lián)盟;游戲

        中圖分類號:TP311.1? ? ? 文獻(xiàn)標(biāo)識碼: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? 引? 言

        來自網(wǎng)絡(luò)的數(shù)據(jù)顯示,2018年電競游戲市場規(guī)模達(dá)417.9億元;中國教育部也將電競專業(yè)納入高等教育體系;2017年亞洲奧林匹克理事會將電子競技納入亞運(yùn)會,2022年,電競將作為杭州亞運(yùn)會的正式比賽項(xiàng)目。近年來電競游戲規(guī)??焖僭鲩L,給游戲開發(fā)產(chǎn)業(yè)注入無窮動力,游戲開發(fā)程序員缺口也越來越大;本文從游戲入手,培養(yǎng)學(xué)生的游戲編程思維和動手能力。

        1? 項(xiàng)目背景

        1.1? 開發(fā)環(huán)境

        開發(fā)語言:C

        開發(fā)工具:Visual Studio 2012/Visual C++6.0

        1.2? 項(xiàng)目需求

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

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

        2? 數(shù)據(jù)模型

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

        struct Weapon

        {//武器類型

        char *name;//武器名

        int attack;//攻擊力

        int defence;//防御力

        int price;//價(jià)格

        };

        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;//價(jià)格

        int attack;//加攻擊力

        int defence;//加防御力

        int blood;//加血量

        };

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

        struct Hero heros[2],player;//英雄結(jié)構(gòu)體數(shù)組,玩家

        struct Weapon weapons[2];//武器結(jié)構(gòu)體數(shù)組

        struct Monst monsts[2],monst;//怪的結(jié)構(gòu)體數(shù)組,隨機(jī)怪

        struct Good goods[2];//藥

        3? 核心代碼

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

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

        {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="金創(chuàng)藥";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? 登錄模塊代碼

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

        void login(){

        int username,password; do{

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

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

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

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

        當(dāng)游戲開始時(shí),玩家可根據(jù)系統(tǒng)提示選擇扮演的角色。相關(guān)代碼如下:

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

        int i,select; printf("序號\t姓名\t武器\t攻擊力\t防御力\t價(jià)格\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? 購買商品模塊代碼

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

        void shopping(){int i,select; printf("序號\t商品名\t單價(jià)\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點(diǎn),防御力提升%d點(diǎn),血量提升%d點(diǎn)!\n",goods[select].name,goods [select].price,goods[select].attack,goods[select].defence,goods[select].blood); } else //買不起

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

        3.5? 戰(zhàn)斗模塊代碼

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

        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發(fā)起了攻擊,造成%d點(diǎn)傷害,%s的血量變?yōu)?d點(diǎn)\n",player.name,monst.name,hurt,monst.name, monst.blood-hurt);monst.blood=monst.blood-hurt; }else //扛不住

        {printf("%s對%s發(fā)起了攻擊,造成%d點(diǎn)傷害,%s的血量變?yōu)?,%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發(fā)起了攻擊,造成%d點(diǎn)傷害,%s的血量變?yōu)?d點(diǎn)\n",monst.name,player.name,hurt,player.name, player.blood-hurt);player.blood=player.blood-hurt;} else {printf ("%s對%s發(fā)起了攻擊,造成%d點(diǎn)傷害,%s的血量變?yōu)?,%s死亡?。躰",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死亡,游戲結(jié)束!\n",player.name);}

        3.6? 新手村模塊代碼

        玩家登錄系統(tǒng)后即進(jìn)入新手村,可以選擇購買裝備或出村打怪練級。相關(guān)代碼如下:

        void newcountryside(){

        int choose; printf("*******歡迎%s進(jìn)入新手村***** ***\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? 結(jié)? 論

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

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

        參考文獻(xiàn):

        [1] 譚浩強(qiáng).C程序設(shè)計(jì):第五版 [M].北京:清華大學(xué)出版社,2017.

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

        [3] 王亮.《C語言程序設(shè)計(jì)》循環(huán)結(jié)構(gòu)教學(xué)案例研究 [J].科技視界,2018(1):60-61.

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

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

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

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

        猜你喜歡
        英雄聯(lián)盟任務(wù)驅(qū)動情境教學(xué)
        高職酒店管理專業(yè)情境教學(xué)模式探究
        任務(wù)驅(qū)動式教學(xué)模式在電子技術(shù)課程中的應(yīng)用
        職業(yè)(2016年10期)2016-10-20 22:18:22
        任務(wù)驅(qū)動教學(xué)法在《網(wǎng)絡(luò)應(yīng)用服務(wù)管理》教學(xué)中的應(yīng)用
        淺析情境教學(xué)法在中職會計(jì)課堂中的應(yīng)用價(jià)值
        考試周刊(2016年79期)2016-10-13 23:33:50
        任務(wù)驅(qū)動, 啟發(fā)學(xué)生自學(xué)
        考試周刊(2016年76期)2016-10-09 09:06:52
        淺談?wù)Z文課堂閱讀教學(xué)
        英語情境教學(xué)中的問題探析
        成才之路(2016年25期)2016-10-08 10:48:46
        任務(wù)驅(qū)動教學(xué)法在中職信息技術(shù)教學(xué)中的運(yùn)用
        成才之路(2016年25期)2016-10-08 10:23:55
        玩家超1億的《英雄聯(lián)盟》如何煉成
        看天下(2016年25期)2016-09-22 15:56:59
        久青青草视频手机在线免费观看| 国产一区二区三精品久久久无广告| 天天爽天天爽天天爽| 免费一级欧美大片久久网| 久久久精品少妇—二区| 99国产精品久久久久久久成人热| 暖暖视频在线观看免费| 男人的天堂在线无码视频| 日本精品熟妇一区二区三区 | 国产18禁黄网站免费观看| 人妻丰满熟妇av无码区hd| 国产精品高潮无码毛片| 91国内偷拍一区二区三区| 久久久久人妻精品一区二区三区| 欧美饥渴熟妇高潮喷水水| 国产九色AV刺激露脸对白| 亚洲五月天中文字幕第一页| 国产av一区二区三区无码野战| 99久久亚洲精品无码毛片| 久久亚洲午夜牛牛影视| 最近中文字幕精品在线| 亚洲精品成人网站在线播放| 国产精品女同一区二区| 日本一级淫片免费啪啪| 男人的天堂一区二av| 成人免费看片又大又黄| 欧美 亚洲 国产 日韩 综AⅤ| 亚洲高清激情一区二区三区| 美女网站免费观看视频| 无码熟熟妇丰满人妻啪啪| 亚洲国产一区二区三区,| 澳门蜜桃av成人av| 国产一卡2卡3卡四卡国色天香| 国产成人久久蜜一区二区| 久久精品人妻中文av| 久久97久久97精品免视看 | 美日韩毛片| 一区二区三区四区免费国产视频| 人成午夜大片免费视频77777| 99久久国语露脸精品国产| 国产精品麻豆成人av|