久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

pascal射擊游戲完整版

時間:2019-05-12 08:37:06下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《pascal射擊游戲完整版》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《pascal射擊游戲完整版》。

第一篇:pascal射擊游戲完整版

uses crt;var headx,armlx,armrx,bodyx,legx,heady,armly,armry,bodyy,legy:integer;blood:integer;eblood:array [1..9] of integer;etowards,towards,x:string;earmrx,earmlx,elegx,ebodyx,eheadx:array [1..9] of integer;head,arml,armr,body,leg:char;i1,i:integer;ehead,earml,earmr,ebody,eleg:char;stepstart,steps,enerys,enerys1:integer;firststart:integer;kk:char;active,enery:array [1..9] of integer;time:longint;skilling,deaths,skilllevel:integer;skilltime:longint;skillactive:string;freezing:integer;label 1;procedure printplayer(pr:integer);begin if pr=0 then begin textcolor(red);gotoxy(headx,heady);write(head);gotoxy(armlx,armly);write(arml);gotoxy(armrx,armry);write(armr);gotoxy(bodyx,bodyy);write(body);gotoxy(legx,legy);write(leg);textcolor(white);end else begin textcolor(green);gotoxy(eheadx[pr],17);write(ehead);gotoxy(earmlx[pr],18);write(earml);gotoxy(earmrx[pr],18);write(earmr);gotoxy(ebodyx[pr],18);write(ebody);gotoxy(elegx[pr],19);write(eleg);textcolor(white);end;end;function locationOK(lOk:integer):boolean;var lOk1:integer;begin locationOK:=true;for lOK1:=1 to i-1 do if enery[lOk1]=enery[i] then locationOK:=false;if enery[i]=bodyx then locationOK:=false;end;procedure printstep;var psp:integer;begin gotoxy(stepstart,20);for psp:=1 to steps do write('=');end;function direct(dr:integer):boolean;var dr1:integer;begin direct:=true;for dr1:=1 to enerys do if(enery[dr1]=dr)and(active[dr1]=1)direct:=false;end;procedure clearplayer(cp:integer);begin gotoxy(cp,19);write(' ');gotoxy(cp-1,18);write('

');gotoxy(cp,17);write(' ');end;procedure turnside;begin gotoxy(38,24);write('

');gotoxy(38,24);write(towards);end;procedure fightover(fo:string);begin if fo='left' then begin gotoxy(armlx-1,armly);

then write('=');gotoxy(armlx-1,armly);write(' ');end;if fo='right' then begin gotoxy(armrx+1,armry);write('=');gotoxy(armrx+1,armry);write(' ');end;end;procedure ifs(is1:string);var is2,is3:integer;is4:string;is5:array [1..9] of integer;begin for is2:=1 to enerys do is5[is2]:=eblood[is2];if is1='left' then for is2:=1 to enerys do if active[is2]=1 then begin if armlx-1=earmrx[is2] then eblood[is2]:=eblood[is2]-5;if armlx-1=ebodyx[is2] then eblood[is2]:=eblood[is2]-10;if armlx-1=earmlx[is2] then eblood[is2]:=eblood[is2]-15;end;if is1='right' then for is2:=1 to enerys do if active[is2]=1 then begin if armrx+1=earmlx[is2] then eblood[is2]:=eblood[is2]-5;if armrx+1=ebodyx[is2] then eblood[is2]:=eblood[is2]-10;if armrx+1=earmrx[is2] then eblood[is2]:=eblood[is2]-15;end;for is2:=1 to enerys do if active[is2]=1 then if abs(enery[is2]-headx)<=3 then begin gotoxy(enery[is2],23);str(is5[is2],is4);for is3:=1 to length(is4)do write(' ');gotoxy(enery[is2],23);write(eblood[is2]);end;end;procedure levelup(lu:integer);var lu1:string;lu2:char;lu3:integer;begin case lu of 1:lu1:='frozen the enemy';end;gotoxy(30,25);write('press ''g'' to get the new skill');repeat lu2:=readkey;until lu2='g';gotoxy(30,25);write('

');gotoxy(1,25);write('You''ve gotten a new skill:press ''f'' to ',lu1,'.Press Enter to continue');lu2:=readkey;gotoxy(1,25);for lu3:=1 to 79 do write(' ');end;procedure killing;var kill:integer;kill1:string;begin for kill:=1 to enerys do if(eblood[kill]<=0)and(active[kill]=1)then begin clearplayer(enery[kill]);enerys1:=enerys1-1;active[kill]:=0;gotoxy(enery[kill],21);write(' ');gotoxy(enery[kill],22);write(' ');gotoxy(enery[kill],23);str(eblood[kill],kill1);for i1:=1 to length(kill1)do write(' ');deaths:=deaths+1;if(deaths=10+skilllevel*5)and(skilllevel+1<2)then begin skilllevel:=skilllevel+1;skilling:=skilllevel;deaths:=0;levelup(skilllevel);end;end;end;procedure printblood;begin gotoxy(51,24);write('

');gotoxy(51,24);write(blood);end;procedure printbloods(pb:integer);begin gotoxy(enery[pb],21);write('');gotoxy(enery[pb],22);write('');gotoxy(enery[pb],23);write(eblood[pb]);end;procedure useskill(us:integer);var us1:integer;begin case us of 1:begin time:=time-240000;freezing:=1;for us1:=1 to enerys do if active[us1]=1 then begin textcolor(blue);gotoxy(eheadx[us1],17);write(ehead);gotoxy(earmlx[us1],18);write(earml);gotoxy(earmrx[us1],18);write(earmr);gotoxy(ebodyx[us1],18);write(ebody);gotoxy(elegx[us1],19);write(eleg);textcolor(white);end;end;//case of //2: end;end;begin towards:='left';headx:=40;heady:=17;armlx:=39;armly:=18;armrx:=41;armry:=18;bodyx:=40;bodyy:=18;legx:=40;legy:=19;blood:=100;head:='';arml:='=';armr:='=';body:='';leg:='A';ehead:='';earml:='=';earmr:='=';ebody:='';eleg:='A';clrscr;randomize;gotoxy(30,24);write('towards:',towards);gotoxy(45,24);write('blood:',blood);printplayer(0);skilltime:=1000000;skillactive:='active';gotoxy(60,24);write('skill:',skillactive);repeat if enerys1=0 then begin enerys:=random(8)+1;enerys1:=enerys;steps:=random(60)+enerys;repeat stepstart:=random(75-steps)+1;until(legx>stepstart)and(legx

');gotoxy(legx,14);write(' ');gotoxy(30,25);write('

printplayer(0);if random(5)=1 then begin

');

gotoxy(10,25);write('You''ve gotten a bag,open it to added your blood.(press ''o'')');repeat kk:=readkey;until kk='o';gotoxy(10,25);write('

');if blood+80<100 then blood:=blood+80 else blood:=100;printblood;end;end else begin firststart:=1;printstep;end;for i:=1 to enerys do begin printplayer(i);active[i]:=1;eblood[i]:=100;printbloods(i);end;end;if keypressed then begin kk:=readkey;case kk of 'a':begin towards:='left';if(bodyx-1>stepstart)and(direct(bodyx-1))then begin headx:=headx-1;armlx:=armlx-1;armrx:=armrx-1;bodyx:=bodyx-1;legx:=legx-1;clearplayer(headx+1);printplayer(0);turnside;

end;end;'d':begin towards:='right';if(bodyx+1=1000000 then begin skilltime:=0;skillactive:='not active';gotoxy(66,24);write('

');gotoxy(66,24);write(skillactive);useskill(skilling);end;end;time:=time+2000;skilltime:=skilltime+2000;end;if time>=40000 then begin time:=0;if freezing=1 then begin freezing:=0;for i:=1 to enerys do if active[i]=1 then printplayer(i);end;for i:=1 to enerys do if active[i]=1 then begin if enery[i]-headx>0 then etowards:='left' else etowards:='right';if abs(enery[i]-headx)>3 then begin if etowards='left' then begin enery[i]:=enery[i]-1;earmlx[i]:=earmlx[i]-1;earmrx[i]:=earmrx[i]-1;ebodyx[i]:=ebodyx[i]-1;eheadx[i]:=eheadx[i]-1;elegx[i]:=elegx[i]-1;clearplayer(eheadx[i]+1);printplayer(i);end;if etowards='right' then begin enery[i]:=enery[i]+1;earmlx[i]:=earmlx[i]+1;earmrx[i]:=earmrx[i]+1;ebodyx[i]:=ebodyx[i]+1;eheadx[i]:=eheadx[i]+1;elegx[i]:=elegx[i]+1;clearplayer(eheadx[i]-1);printplayer(i);end;if etowards='left' then i1:=1 else i1:=-1;gotoxy(enery[i]+i1,21);write(' ');gotoxy(enery[i]+i1,22);write(' ');gotoxy(enery[i]+i1,23);str(eblood[i],x);for i1:=1 to length(x)do write(' ');printbloods(i);end else begin if etowards='left' then begin gotoxy(earmlx[i]-1,18);write('=');gotoxy(earmlx[i]-1,18);write(' ');if earmlx[i]-1=armrx then blood:=blood-1;if earmlx[i]-1=bodyx then blood:=blood-2;if earmlx[i]-1=armlx then blood:=blood-3;end;if etowards='right' then begin gotoxy(earmrx[i]+1,18);write('=');gotoxy(earmrx[i]+1,18);write(' ');if earmrx[i]+1=armlx then blood:=blood-1;if earmrx[i]+1=bodyx then blood:=blood-2;if earmrx[i]+1=armrx then blood:=blood-3;end;printblood;if blood<=0 then goto 1;end;

end;end;time:=time+1;skilltime:=skilltime+1;if(skilltime>=1000000)and(skillactive='not active')then begin skillactive:='active';gotoxy(66,24);write('

');gotoxy(66,24);write(skillactive);end;if skilltime>=10000000 then skilltime:=8000000;until 1=0;1:clrscr;gotoxy(30,12);write('game over');readln;end.

第二篇:射擊游戲

射擊游戲

?編號:SJYX1?名稱:近軌道先鋒

?大小:20MB?適用固件:4.0固件及以上

?游戲由13個游戲關卡和5個不同的場景組成。玩家在游戲中可以使用狙擊槍、等離子槍、火箭發(fā)射器和手榴彈等6種不同的武器裝備。

?游戲包含單人模式和多人模式,其還支持玩家通過WiFi/藍牙進行在線或聯(lián)機游戲。

?編號:SJYX2?名稱:近軌道先鋒

?大小:222MB?適用固件:3.1.2固件及以上

?游戲的劇情為軍國主義保皇黨人囚禁了你們的領袖,并在銀河中散播恐怖展開激戰(zhàn),而你是一名王牌明星飛行員。你需要率領反抗軍戰(zhàn)機隊,加入到高強度模擬空戰(zhàn)中與他們決一死戰(zhàn)。反抗軍和保皇黨之間的戰(zhàn)爭將會貫穿整個太空,橫跨數(shù)個星系,這一切都將由全高清畫面所呈現(xiàn)。你將會在極富未來感的城市、叢林、沙漠和冰山中戰(zhàn)斗。

?單人游戲運,行流暢,操作簡便多人游戲部分則支持雙人對戰(zhàn)(藍牙/WiFi)。

?編號:SJYX3?名稱:生死9毫米

?大小:733MB?適用固件:3.1.3固件及以上

?游戲集成了俠盜系列犯罪游戲的內容,包括幫派、槍戰(zhàn)等常見的犯罪元素,不過游戲的主角看起來更像是警察的臥底,《9毫米》明顯的表現(xiàn)出俠盜類游戲的風格,自由的駕駛、打架、槍戰(zhàn),畫面充斥暴力、金錢與毒品。

?本地或者在線的死亡對戰(zhàn)或者團隊死亡對戰(zhàn)、支持最多12名玩家進行對戰(zhàn)、4張不同的地圖以及16種不同的武器和多種的武器性能升級

?編號:SJYX4?名稱:戰(zhàn)地:叛逆連隊

2?大小:234MB?適用固件:3.0固件及以上

?將會橫跨5個不同區(qū)域、多達14個單人任務。將會在叢林、沙漠和雪地之中進行。同時游戲還將會包含多人在線模式,可以通過聯(lián)網(wǎng)進行小隊作戰(zhàn),最多支持4名玩家通過3G、Wifi、OTA聯(lián)機,進行TDM和DM多人模式。

?游戲注重體現(xiàn)現(xiàn)代戰(zhàn)爭的真實性,玩家可破壞各種場景物品,能對建筑物框架進行破壞。同時注重小隊配合作戰(zhàn)也是《叛逆連隊2》的特點

?編號:SJYX5?名稱:恐龍戰(zhàn)士

?大小:160MB?適用固件:3.0固件及以上

?還有這3種游戲模式,你可以和多達4個人一起進行多人游戲哦

?Nanosaur 2是一款3D風格的飛行射擊游戲,游戲采用重力感應控制

?游戲中需要要小心的操控飛行,注意炮塔、迅猛龍或其他恐龍的攻擊。超過地圖的空間還是會撞壁爆炸的.哦

?編號:SJYX6?名稱:秘密行動

?大小:657MB?適用固件:3.0固件及以上

?在游戲中,玩家會扮演三名不同的特工,每個人都擁有自己不同的能力。?多人模式也可讓你和朋友組隊(本地藍牙)。

?秘密行動是以世界諜戰(zhàn)為基礎的動作游戲,橫跨日內瓦,杜布羅夫尼克,香港等地區(qū)來完成各種富有挑戰(zhàn)性的任務。

?編號:SJYX7?名稱:戰(zhàn)地:叛逆連隊

?大小:257MB?適用固件:3.0固件及以上

?五張各式的地圖和三種不同模式(自由戰(zhàn),團隊死亡戰(zhàn),控制戰(zhàn))下與多至5位好友聯(lián)機作戰(zhàn)。還可以直接通過藍牙進行本地聯(lián)機,或通過Wi-Fi聯(lián)網(wǎng)與世界各地的朋友們對戰(zhàn)。

?操縱包括坦克、越野車和滑翔機在內的3種交通工具來干掉敵人,或進行成功逃離。武器還可以用機槍、火箭筒、狙擊步槍及火焰噴射器等多種真實二戰(zhàn)武器。

?編號:SJYX8?名稱:現(xiàn)代戰(zhàn)爭2黑色飛馬

?大小:566MB?適用固件:3.1.2固件及以上

?玩家將操縱3名可操縱角色之一,投身到橫跨中東、東歐與南美的12大戰(zhàn)場中去。臉部細節(jié)動畫以及慢動作瞬殺帶來令人屏息的緊張體驗。15種真實軍用武器可供使用,您可以直接從敵人處獲取,也可利用數(shù)種附件對其進行升級。中彈或遭受其他傷害時畫面產生模糊效果、武器上展現(xiàn)動態(tài)光影都營造出真實的戰(zhàn)爭體驗。多人游戲方面,支持最多10名玩家可同時參與在線與本地對抗。

?編號:SJYX9?名稱:戰(zhàn)列艦

?大小:20MB?適用固件:3.1.2固件及以上

?一款經典戰(zhàn)艦游戲,指揮你的軍艦,將對手擊沉,具有多種不同的游戲模式,并支持多人對戰(zhàn)。通過巧妙的部署戰(zhàn)艦,避開敵方部隊的探測;運用火力偵察鎖定敵船,將它送入海底!讓你如臨其境的逼真炮聲,以及無線電中不時響起的呼叫!你所熟知并鐘愛的戰(zhàn)艦,都將真實展現(xiàn)在你面前

?編號:SJYX10?名稱:合金風暴

?大小:20MB?適用固件:3.1.2固件及以上

?實時多人-支持3G和Wi-Fi同其他玩家聯(lián)機比賽,生存模式:在合作多人模式下與朋友合作或單人多次消滅敵人,回旋裝置允許通過iPhone 4和iPod touch四代裝置進行精確控制

?高解析支持的下一代3D圖像、眾多飛行器可供選擇、自定義飛行器導彈和機槍 ?不同方向擊打,執(zhí)行高難度機動動作、3D空間全360度飛行

?編號:SJYX11?名稱:鋼鐵大戰(zhàn)

?大小:20MB?適用固件:3.1.2固件及以上

?一個 3D平面射擊游戲,游戲單人戰(zhàn)斗有 3 種不同的模式,多達 32 個關卡,多人戰(zhàn)斗最多可支持 4 人 WIFI 連接,玩家需在遙遠的鋼鐵星球上為了最強名號的榮譽而戰(zhàn),其精彩的戰(zhàn)斗射擊場景定能讓你熱血澎湃。喜歡火爆刺激的射擊游戲?想體驗與對手猛烈互擊,在槍林彈雨之中狂奔躲閃然后消滅對手的快感么?那么可以試試這款《Iron Wars》,雖然游戲里你將成為一個鋼鐵圓球……

?編號:SJYX12?名稱:三國殺

?大小:20MB?適用固件:IOS4固件及以上

?這是一個交織著扮演、推理、典故的游戲,充滿著智慧的搏殺、人性的對決,符合中國人的審美情趣和娛樂需求。

?三國殺online是移植三國殺實體紙牌的正統(tǒng)之作,由盛大邊鋒的研發(fā),力圖帶來最完美的三國殺游戲體驗。游戲嚴格遵循官方設定的規(guī)則和邏輯,并根據(jù)最新的動態(tài)進行實時調整,保證您能第一時間玩到原汁原味、專業(yè)嚴謹?shù)娜龂鴼ⅰ?/p>

?編號:SJYX13?名稱:牛仔神槍手

?大小:20MB?適用固件:IOS4固件及以上

?Cowboy Guns HD在很多設計上比較獨特,比如80度的俯視角,樂高造型人物,雙搖桿操作方式,帶點復古粗獷色彩的3D場景構架,再加上濃烈的美國西部風情,這些要素都吸引著玩家很好地代入到游戲角色中去。

第三篇:大實驗射擊游戲(本站推薦)

嵌入式Linux應用程序開發(fā)

期末結課實驗

基于QT的射擊游戲

學號:1411640407 姓名:林向東 班級:計算機1404班 學院:計算機科學與軟件學院

【實驗目的】

1、掌握Qt下繪圖函數(shù)的使用方法;

2、掌握標簽(Label)、段碼液晶(LCDNumber)、滑動條(Slider)等部件的應用;

3、掌握Qt下不同坐標系的轉換。

4、掌握通過源代碼重構工程并編譯的方法

【實驗設備】

1、裝有Ubuntu系統(tǒng)或裝有Ubuntu虛擬機的PC機一臺;

2、凌陽A8嵌入式實驗箱一臺;

3、本實驗用到實驗箱的模塊有:S5PV210 CPU板模塊,LCD液晶屏。

【實驗要求】

完成一個射擊小游戲,這是4.7.0之前的版本的Qt源碼中自帶的一個范例

序,具

在qtopia-core-opensource-src-4.3.5examplestutorialt14。雖然在4.7.0之后的版本中刪掉了這個范例,但是通過這個實例,可以使讀者深入理解QT信號與槽,變換坐標系等較深層內容。運行后游戲界面如圖。

【實驗原理】

1、Qpainter QPainter類低水平的繪制,例如在窗口部件上。使用Qpainter類,需要包含頭文件繪制工具為做到絕大部分繪制圖形用戶界面程序的需要提供了高度優(yōu)化的函數(shù)。QPainter可以繪制從簡單的直線到像餅圖和弦這樣的復雜形狀。它也可以繪制排列的文本和像素映射。通常,它在一個“自然的”坐標系統(tǒng)中繪制,但是它也可以在坐標系轉換中做到這些。

使用方法很簡單并且這里有可以使用的許多設置:font()返回當前設置的字體、setFont()設置要使用的字體。如果你設置一個不可用的字體,Qt會找到一個相近的匹配。實際上,font()返回你使用setFont()所設置的東西并且fontInfo()返回你實際使用的字體(這也許是相同的)。brush()是當前設置的畫刷,用來填充例如圓的顏色或者調色板。pen()是當前設置的畫筆,用來畫線或者邊緣的顏色或者點畫。painter的當前狀態(tài)能通過調用save()和稍后調用restore()存儲在stack中.當我們需要臨時改變一些painter settings并要恢復到以前的狀態(tài)時,這個功能是很有用的.QPainter的核心功能是繪制,并且這里有最簡單的繪制函數(shù):drawPoint()、drawPoints()、drawLine()、drawRect()、drawWinFocusRect()、drawRoundRect()、drawEllipse()、drawArc()、drawPie()、drawChord()、drawLineSegments()、drawPolyline()、drawPolygon()、drawConvexPolygon()和drawCubicBezier()。所有這些函數(shù)使用整數(shù)坐標,它們沒有浮點數(shù)的版本,因為我們想使繪制盡可能快地進行。

2、坐標系統(tǒng)

在Qt中的一個繪畫設備是一個可畫的二維平面。QWidget、QPixmap、QPicture和QPrinter都是繪畫設備。QPainter是一個可以在上面畫的對象。一個繪畫設備的默認坐標系統(tǒng)的原點在左上角。X軸由左向右增加,Y軸由上向下增加。對于基于像素的設備單位是像素,對于打印機是點。Qt的坐標系除了默認的坐標系以外還可對坐標系進行轉換,這樣結合Qpainter的繪圖函數(shù)就可以畫出各種圖形。Qt提供了像QPainter::rotate()、QPainter::scale()、QPainter::translate()等方法來改變坐標系。

3、射擊小游戲

射擊小游戲可以通過拖動右邊“ANGLE”和“FORCE”滑動條,改變發(fā)射子彈的角度和力量,點擊“Shoot”按鈕就可以發(fā)射子彈,子彈以拋物線的角度運行,如果撞到紅色的目標物體,則游戲成功,上面的LCD段碼“HITS”數(shù)值加一,每一局規(guī)定可以發(fā)射子彈的數(shù)據(jù),SHOTS LEFT顯示還有多少發(fā)子彈可以發(fā)射。整體窗口布局可以分為以下幾部分:上面的按鈕及LCD段碼,包括“Quit”“Shoot”“NewGame”“HITS”“SHOTS LEFT”;窗口左邊的‖ANGLE‖,‖F(xiàn)ORCE‖是LCD段碼和滑動條的組合,可以用來改變發(fā)射角度和發(fā)射力量兩個變量;窗口右邊大部分黃色的區(qū)域是游戲主窗口,里面包括了大炮,炮彈,目標,障礙墻等幾個成員。【實驗代碼】

lcdrangge.cpp和lcdrange.h創(chuàng)建了一個新的窗體,窗體中包含了一個標簽,一個LCD段碼,一個滑動條。滑動條和LCD段碼建立信號與槽的聯(lián)系,這樣當滑動條移動時其數(shù)值的變化直接就可以通過LCD段碼顯示。其構造函數(shù)如下: void LCDRange::init(){ QLCDNumber *lcd = new QLCDNumber(2);// 定義LCD段碼lcd->setSegmentStyle(QLCDNumber::Filled);slider = new QSlider(Qt::Horizontal);// 定義水平滑動條 slider->setRange(0, 99);slider->setValue(0);label = new QLabel;// 定義標簽

label->setAlignment(Qt::AlignHCenter | Qt::AlignTop);label->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));// 建立滑動條信號和LCD段碼槽函數(shù)的連接

connect(slider, SIGNAL(valueChanged(int)), this, SIGNAL(valueChanged(int)));// 建立滑動條信號和窗體信號的連接QVBoxLayout *layout = new QVBoxLayout;layout->addWidget(lcd);// 采用垂直布局器,安排三個組件layout->addWidget(slider);layout->addWidget(label);setLayout(layout);setFocusProxy(slider);// 設置焦點在滑動條上 } 1)大炮

大炮由兩部分組成一部分是下面的底座,一部分是活動的炮筒。需要轉換坐標系然后畫一個餅形,對于炮筒,類似與上面鐘表例子的時鐘,需要隨著角度的不同而不同,代碼如下。void CannonField::paintCannon(QPainter &painter){ painter.setPen(Qt::NoPen);painter.setBrush(Qt::blue);painter.save();// 保存坐標信息

painter.translate(0, height());//平移坐標原點

painter.drawPie(QRect(-35,-35, 70, 70), 0, 90 * 16);// 畫餅形

painter.rotate(-currentAngle);// 旋轉坐標系,painter.drawRect(barrelRect);// 在新的坐標系中,畫矩形,即炮筒

painter.restore();// 回復原來的坐標系 } 2)炮彈

炮彈使用一個小矩形代替,炮彈的運行軌跡為拋物線,代碼如下 QRect CannonField::shotRect()const { const double gravity = 4;double time = timerCount / 20.0;double velocity = shootForce;// 發(fā)射力量

double radians = shootAngle * 3.14159265 / 180;// 發(fā)射角度 double velx = velocity * cos(radians);// 根據(jù)發(fā)射力量,角度和時間計算炮彈位置

double vely = velocity * sin(radians);// 采用標準牛頓力學公式

double x0 =(barrelRect.right()+ 5)* cos(radians);double y0 =(barrelRect.right()+ 5)* sin(radians);double x = x0 + velx * time;double y = y0 + vely * time1-qRound(y)));return result;} 3)目標

目標也是使用一個小矩形表示,為了增加趣味性,目標矩形的位置是隨機的。QT提供了隨機函數(shù)qrand提供隨機數(shù),創(chuàng)建一個新目標代碼如下。

void CannonField::newTarget(){ static bool firstTime = true;// ensure create new target when old target disappear if(firstTime){ firstTime = false;QTime midnight(0, 0, 0);qsrand(midnight.secsTo(QTime::currentTime()));// 設置隨機種子 } target = QPoint(200 + qrand()% 190, 10 + qrand()% 255);// 得到隨機坐標值update();} 當炮彈發(fā)射后,需要判斷炮彈是否擊中了目標,可以使用下面函數(shù)判斷。

void CannonField::moveShot(){ QRegion region = shotRect();// 保存炮彈矩形 ++timerCount;QRect shotR = shotRect();// receive new ball region if(shotR.intersects(targetRect())){ // 如果炮彈和目標重合,則認為擊中目標 autoShootTimer->stop();// 停止定時器 emit hit();// 發(fā)送擊中目標信號

emit canShoot(true);// 表示可以再次發(fā)送炮彈了 } else if(shotR.x()> width()|| shotR.y()> height()|| shotR.intersects(barrierRect())){// 如果炮彈到達邊界過著碰到障礙墻 autoShootTimer->stop();// 本次發(fā)射結束 emit missed();// 發(fā)送沒有擊中目標信號 emit canShoot(true);// 表示可以再次發(fā)送炮彈 } Else { region = region.unite(shotR);//平滑移動炮彈 } update(region);} gameboard.cpp,gameboard.h這兩個文件的作用是封裝用到的所有成員建立信號與槽的連接,然后使用布局管理組件完成對各成員的布局。GameBoard初始化函數(shù)如下所示。

GameBoard::GameBoard(QWidget *parent): QWidget(parent){ QPushButton *quit = new QPushButton(tr(“&Quit”));quit->setFont(QFont(“Times”, 18, QFont::Bold));connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));LCDRange *angle = new LCDRange(tr(“ANGLE”));angle->setRange(5, 70);LCDRange *force = new LCDRange(tr(“FORCE”));force->setRange(10, 50);QFrame *cannonBox = new QFrame;cannonBox->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);cannonField = new CannonField;connect(angle, SIGNAL(valueChanged(int)), cannonField, SLOT(setAngle(int)));connect(cannonField, SIGNAL(angleChanged(int)), angle, SLOT(setValue(int)));connect(force, SIGNAL(valueChanged(int)), cannonField, SLOT(setForce(int)));connect(cannonField, SIGNAL(forceChanged(int)), force, SLOT(setValue(int)));connect(cannonField, SIGNAL(hit()), this, SLOT(hit()));connect(cannonField, SIGNAL(missed()), this, SLOT(missed()));QPushButton *shoot = new QPushButton(tr(“&Shoot”));shoot->setFont(QFont(“Times”, 18, QFont::Bold));connect(shoot, SIGNAL(clicked()), this, SLOT(fire()));connect(cannonField, SIGNAL(canShoot(bool)), shoot, SLOT(setEnabled(bool)));QPushButton *restart = new QPushButton(tr(“&New Game”));restart->setFont(QFont(“Times”, 18, QFont::Bold));connect(restart, SIGNAL(clicked()), this, SLOT(newGame()));hits = new QLCDNumber(2);hits->setSegmentStyle(QLCDNumber::Filled);shotsLeft = new QLCDNumber(2);shotsLeft->setSegmentStyle(QLCDNumber::Filled);QLabel *hitsLabel = new QLabel(tr(“HITS”));QLabel *shotsLeftLabel = new QLabel(tr(“SHOTS LEFT”));(void)new QShortcut(Qt::Key_Enter, this, SLOT(fire()));(void)new QShortcut(Qt::Key_Return, this, SLOT(fire()));(void)new QShortcut(Qt::CTRL + Qt::Key_Q, this, SLOT(close()));QHBoxLayout *topLayout = new QHBoxLayout;topLayout->addWidget(shoot);topLayout->addWidget(hits);topLayout->addWidget(hitsLabel);topLayout->addWidget(shotsLeft);topLayout->addWidget(shotsLeftLabel);topLayout->addStretch(1);topLayout->addWidget(restart);QVBoxLayout *leftLayout = new QVBoxLayout;leftLayout->addWidget(angle);leftLayout->addWidget(force);QVBoxLayout *cannonLayout = new QVBoxLayout;cannonLayout->addWidget(cannonField);cannonBox->setLayout(cannonLayout);QGridLayout *gridLayout = new QGridLayout;gridLayout->addWidget(quit, 0, 0);gridLayout->addLayout(topLayout, 0, 1);gridLayout->addLayout(leftLayout, 1, 0);gridLayout->addWidget(cannonBox, 1, 1, 2, 1);gridLayout->setColumnStretch(1, 10);setLayout(gridLayout);angle->setValue(60);force->setValue(25);angle->setFocus();newGame();} 【實驗總結】

這個實驗讓我體會到QT編程的魅力所在。雖然有源碼,需要自個編寫的東西并不多,但還是有很大的收獲的。

第四篇:射擊游戲 Java

游戲資源是從cping1982的博客里下載的(http://blog.csdn.net/cping1982/article/details/6725015)。

下載下來的源碼是反編譯的,我按照自己的思路,盡量模擬跟它一樣的功能效果,用自己的代碼實現(xiàn),并且自己寫了一個地圖編輯器。用到的技術大概有:swing基本控件,線程,XML讀寫,IO,反射的簡單應用,2D繪圖。

最重要的一個自定義類:Canvas。

每個canvas都有一個render方法和update方法,每個canvas又可以添加別的canvas,類似swing的component結構,每個canvas執(zhí)行render和update的時候都會遍歷所有子canvas執(zhí)行render和update,從而實現(xiàn)所有canvas都執(zhí)行渲染和更新。游戲的刷新機制:

這個刷新機制是直接學的原代碼里面的實現(xiàn)機制,看它沒注釋的代碼著實蛋疼,還是請教了我?guī)煾礵esolatecity大神才理解的--!。

最高層是一個繼承JFrame的GameFrame,實現(xiàn)了Runnable,游戲啟動后會單獨運行不斷循環(huán)刷新,每隔大概15ms就執(zhí)行一次render,并將整個循環(huán)所用時間通過update方法傳給canvas,最高層canvas再一層一層傳遞下去,實現(xiàn)所有canvas的渲染和更新。大致代碼實現(xiàn)如下:

[java] view plaincopy

1.while(gameOn){

2.// 獲取開始時的系統(tǒng)時間

3.long startTime = System.currentTimeMillis();4.5.// 標記時間所用變量

6.long l1;

7.long l2 = System.currentTimeMillis();8.long l3 = System.currentTimeMillis();9.10.// 執(zhí)行for循環(huán),直到經過了step毫秒

11.for(l1 = l3l2){ 12.l3 = System.currentTimeMillis();13.}

14.// for循環(huán)結束,開始渲染和更新

15.l2 = System.currentTimeMillis();// 重置l2

16.17.this.getCurrentCanvas().render(g2);// 渲染

18.19.this.getGraphics().drawImage(bufImg, 0, 0, null);// 將緩沖圖片畫到JFrame

20.21.long endTime = System.currentTimeMillis();// 獲取結束時的系統(tǒng)時間

22.23.this.getCurrentCanvas().update(endTime 元素”的映射關系將時間和對應元素存儲到一個IdentityHashMap里,然后游戲的主canvas在update的時候遍歷IdentityHashMap,若當前時間滿足map里面的時間,則將對應的元素提取出來,添加到當前的子canvas列表里面,從而一個新的元素(或敵人,或提示消息等)就被添加到了界面上。這里我用到了一個比較少用的IdentityHashMap,原本直接用的是HashMap,后來發(fā)現(xiàn)一個時間有時候要對應多個元素,然后上網(wǎng)查到了這個東東,但是由于鍵是按照對象來存儲的,所以要把時間用String對象來存儲,搞得讀取和存儲的時候各種麻煩。結果后來師傅一指點才知道,可以直接用HashMap來存儲“時間--ArrayList”,這樣又方便又直接。--!后來嫌麻煩也不去改了。。

地圖編輯器:

地圖編輯器沒有什么特別費腦袋的地方,就是各種swing控件的運用,還有xml的讀寫,簡單的反射應用等。

由于整個游戲基本上都是在邊學變寫,所以很多地方寫的很粗糙,以至于后來去整理的時候發(fā)現(xiàn)前面的代碼結構簡直丑死了--,改都該了半天。

最后附上源碼下載地址,如果有興趣的話可以互相探討學習。

下載地址:http://download.csdn.net/download/jianglihui0330/4493082

游戲截圖:

地圖編輯器截圖:

第五篇:射擊游戲實例

第七講 射擊游戲實例

學習目標: ? 設置顯示圖標的屬性

? 運動圖標中Direct to Grid類型的使用 ? Goto、Test函數(shù)的使用 ? 使用交互圖標的按鍵響應 ? 聲音圖標的使用

? 利用Random函數(shù)隨機定義顯示位置 程序功能

飛機每4秒移動到一個隨機位置,利用方向鍵移動瞄準器。瞄準器套住飛機后,可以按鍵射擊,飛機被擊中后爆炸。2 主要操作步驟

? 拖入計算圖標,名為“初始化”,在計算窗口中輸入: x:=50 y:=50 ——(x,y)為瞄準器的坐標 x1:=Random(1,100,1)y1:=Random(1,100,1)——(x1,y1)為飛機的坐標

拖入顯示圖標,名為“瞄準器”

打開菜單命令 [Modify]/[Icon]/[Properties],設置Positioning為On Screen,Movable為On Screen,并設置Layer為3 拖入顯示圖標,引入飛機的圖片

打開菜單命令 [Modify]/[Icon]/[Properties],設置Positioning為On Screen,Movable為On Screen 拖入運動圖標,雙擊打開屬性窗口,選擇Type為Direct to Grid,選中被射擊物,拖動圖片定義Base和End,定義Destination為x1和y1,并設置Concurrency為Perpetual 拖入運動圖標,設置瞄準器的運動圖標同上,Destination為x和y 拖入交互圖標,再拖入計算圖標到交互圖標右側,名為“4秒后移動”,選擇Time Limit響應類型

雙擊響應類型符號,設置Time Limit為4,取消Show Time Remaining的選擇,設置Branch為Continue 打開計算圖標窗口,輸入以下內容: x1:=Random(1,100,1)y1:=Random(1,100,1)?

?

?

? ?

?

GoTo(IconID@“移動飛機”)—— GoTo為系統(tǒng)函數(shù)

? 拖入計算圖標到交互圖標最右側,雙擊響應類型符號,選擇Type為Keypress,設置Key(s)為leftarrow

注:leftarrow為系統(tǒng)指定的鍵盤左鍵的名稱

打開計算圖標窗口,輸入以下內容: x:=x-5 Test(x<0,x:=0)

——Test(條件,表達式1,表達式2)是系統(tǒng)函數(shù),條件成立時,執(zhí)行表達式1,否則執(zhí)行表達式2 同理,拖入三個計算圖標,Key(s)分別為rightarrow、uparrow和downarrow

在rightarrow計算窗口中輸入: x:=x+5 Test(x>100,x:=100)在uparrow計算窗口中輸入: y:=y-5 Test(y<0,y:=0)在downarrow計算窗口中輸入: y:=y+5 Test(y>100,y:=100)

拖入群組圖標到交互圖標最右側,雙擊響應類型符號,設置Key(s)為Tab,Branch為Exit Interaction,在Active If中輸入ABS(x-x1)<20 & ABS(y-y1)<20

打開群組圖標,在二級流程線上拖入顯示圖標,引入爆炸圖片

打開菜單命令 [Modify]/[Icon]/[Properties],設置Positioning為In Area,Movable為In Area,拖動圖片定義Base和End,設置Initial為x1和y1

在二級流程線上拖入清除爆炸畫面的擦除圖標 ?

?

?

?

?

?

下載pascal射擊游戲完整版word格式文檔
下載pascal射擊游戲完整版.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發(fā)現(xiàn)有涉嫌版權的內容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關證據(jù),工作人員會在5個工作日內聯(lián)系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    Unity3d射擊游戲報告

    Unity3D游戲開發(fā) 課程設計實驗報告 項目名稱 GoldCoinGame 班 級 11402 小組成員唐智 梁俊龍薛柯 高立存 姓 名唐智 學 號1404240717 1.游戲說明 游戲運行畫面: 游戲目標:收......

    簡述第三人稱射擊游戲

    簡述第三人稱射擊游戲 首先在介紹第三人稱射擊游戲前要知道什么是第三人稱視角游戲。 廣義的第三人稱視角游戲(英語:third-person game)是最原始的游戲類型,這類游戲是需要玩家......

    射擊游戲作文[共5篇]

    射擊游戲作文在學習、工作、生活中,大家都跟作文打過交道吧,通過作文可以把我們那些零零散散的思想,聚集在一塊。相信許多人會覺得作文很難寫吧,以下是小編為大家收集的射擊游戲......

    玩射擊游戲作文[5篇模版]

    玩射擊游戲作文在平平淡淡的日常中,大家都跟作文打過交道吧,作文根據(jù)體裁的不同可以分為記敘文、說明文、應用文、議論文。你所見過的作文是什么樣的呢?以下是小編整理的玩射擊......

    射擊乒乓球的游戲教案設計[5篇范文]

    游戲意圖:家長利用空余時間,到孩子的幼兒園,和孩子還有老師一起玩親子游戲,對于孩子來講,不僅充滿了歡樂,而且,還能真正增進了與孩子之間的關系。游戲準備:啤酒瓶、乒乓球、彈弓、護......

    射擊教案

    手槍的擊發(fā) 授課提要 題目:手槍的擊發(fā) 目的:使同志們了解掌握手槍的擊發(fā)動作 內容: 一、手槍射擊的特點 二、講解手槍擊發(fā)動作要領 三、擊發(fā)與心理的聯(lián)系 四、常見的錯誤動作和......

    射擊作文

    射擊作文 射擊作文馬村區(qū)實驗小學四(1)班 楊一鳴寒假中的趣事像天上的星星一樣數(shù)不勝數(shù),又像海邊的貝殼一樣美好的五彩繽紛。在寒假的美好回憶中,最讓我難忘的就是在公園里射擊......

    射擊心得

    實彈射擊體會 今天進行了第一次實彈射擊,首先從準備動作來看,進場后一切動作聽教官安排,關于動作要領,標準姿勢如下:身體斜側目標站立,與目標約成45度角,兩腳自然開立略與肩同寬,身......

主站蜘蛛池模板: av狼友无码国产在线观看| 亚洲午夜无码av毛片久久| 国产萌白酱喷水视频在线观看| 艳妇臀荡乳欲伦交换h在线观看| 日本一区二区三区免费播放| 隔壁人妻偷人bd中字| 亚洲精品国产高清在线观看| 奇米精品视频一区二区三区| 2021久久国自产拍精品| 欧美黑人又粗又大久久久| 中文字幕欧美人妻精品一区| 国产偷国产偷亚洲清高网站| 国产99久久亚洲综合精品| 扒开双腿疯狂进出爽爽爽视频| 国产国拍亚洲精品永久软件| 国产清纯白嫩初高生在线观看| 豆国产97在线 | 亚洲| 99国产精品99久久久久久| 日韩欧美高清dvd碟片| 国产在线观看超清无码视频一区二区| 日韩精品无码区免费专区| 久久亚洲色www成人图片| 丰满岳跪趴高撅肥臀尤物在线观看| 中国杭州少妇xxxx做受| 国精品人妻无码一区二区三区喝尿| 青青狠狠噜天天噜日日噜| 亚洲人成电影在线天堂色| 18禁超污无遮挡无码免费游戏| 性色做爰片在线观看ww| 成 人 网 站 免费观看| 小13箩利洗澡无码视频网站| 色欲av永久无码精品无码蜜桃| 无码av中文一区二区三区桃花岛| 一个人看的www视频免费观看| 少妇无码av无码专区| 国产精品久久久久久人妻| 国产精品a国产精品a手机版| 中文字幕日本特黄aa毛片| 中文无码一区二区不卡αv| 亚洲色偷拍另类无码专区| 国产综合视频一区二区三区|