用源碼編輯器制作射擊小游戲(源碼編輯器怎么玩)
本篇文章給大家談談用源碼編輯器制作射擊小游戲,以及源碼編輯器怎么玩對應的知識點,希望對各位有所幫助,不要忘了收藏本站喔。
本文目錄一覽:
- 1、用Unity 怎么制作3D第一人稱射擊游戲。
- 2、源碼編程器怎么玩其他小游戲的
- 3、用C++編寫的小游戲源代碼
- 4、如何使用construct2制作射擊小游戲
- 5、跪求用C++語言編寫的小游戲的源代碼
用Unity 怎么制作3D第一人稱射擊游戲。
第一部分:簡介
這個教程中,我們詳細了解下如何制作一個簡單的第一人稱射擊游戲(FPS)。其中將介紹一些基本的3D游戲編程的概念和一些關于怎樣如游戲程序員般思考的技巧。
前提
這個教程假定你已經熟悉軟件Unity基本操作,掌握了基本的腳本概念。
創(chuàng)建新工程
下載FPS_Tutorial.zip壓縮文件,解壓,在Unity中打開工程文件。
從Unity安裝目錄導入Standard Assets資源包。
導入工程后,你會在Unity工程面板中的“Standard Assets”文件夾下看見這些資源內容。當我們導入新資源時,最好安裝按照資源功能對其分組,例如:火箭、爆炸、音頻等。
設置游戲環(huán)境
導入資源后,你會注意到在工程面板中有許多文件夾。
工程面板中,從文件夾“Object/mainLevelMesh”中選擇“mainLevelMesh”。
在參數面板,FBXImporter選項中,你會發(fā)現“Generate Colliders”選項,勾選此選項。如果不做這一步,游戲中玩家會穿越地面直接掉下深淵(實際是開啟“碰撞”,產生交互)
把“mainLevelMesh”拖放到場景中。
場景中不需要添加燈光,這關全部場景已經全部應用了燈光貼圖。整個場景對所有燈光進行了燈光貼圖渲染,使用了“預烘焙陰影”。燈光貼圖對顯示效果有很大幫助,特別是復雜燈光環(huán)境。
下面可以在場景中添加一個角色了。
添加主要角色
下面在場景中增加一個可以操控的角色物體。Unity針對第一人稱射擊游戲預置了許多內置的控制器,在工程面板Standard Assets-;Prefabs下。
添加第一人稱控制器,點擊工程面板Standard Assets旁邊的小三角,彈出資源列表。找到Prefabs文件夾,點擊小三角形,彈出資源列表。把“First person controller”拖到場景里。
這時場景中會出現一個代表玩家的圓柱體,三個大箭頭代表物體在3D空間中的位置(如果沒有看見箭頭,選擇物體,按“W”鍵),白色面代表物體當前視角?,F在FPS控制器處于默認視角位置,通過移動它可以改變游戲視野。把角色移動到游戲環(huán)境關卡地面上面的位置。
Main Camera現在已經沒有用處了,可以刪掉了。
點擊“Play”鍵,現在應該可以通過使用鼠標和鍵盤在本關卡地形中四處移動了(光標或者“W,A,S,D”)
現在我們創(chuàng)建了一個非常簡單的FSP,下面我們給角色添加武器。
增加武器
下面我們將給游戲角色一個類似榴彈的物體,可以在游戲中發(fā)射。要實現這個功能,需要創(chuàng)建一些腳本語言來在Unity中告知這個武器如何動作。
那么我們具體要實現什么呢?我們要使游戲角色能在攝像機的任意位置開火。但是,我們還是首先來思考一下游戲角色和武器。游戲角色游戲中是第一人稱的視角,所以攝像機的位置與眼睛平行。如果玩家使用武器射擊,武器應該是在角色的手部位置開火而不是眼睛的位置。這樣我們就要增加一個“game object”(游戲物體)來代表榴彈發(fā)射器,同時把它放置在游戲角色手持武器時武器所處的位置。這樣就保證了開火的位置沒有問題。
創(chuàng)建武器發(fā)射器
首先,創(chuàng)建一個“game object”代表榴彈發(fā)射器。游戲物體是3D世界中的任一物體(角色、關卡、聲音),零件就是游戲物體的屬性。因此我們還需要對游戲物體添加零件:
從主菜單欄選擇GameObjectGreat Empty,并在層級面板中(Hierarchy)命名為“Launcher”。注意,空物體在場景中是看不見的,只是用它來作放置飛彈發(fā)射器。
現在在場景中把視野推近到FPS控制器,便于我們放置武器發(fā)射器。
層級面板中選擇FPS控制器,確保鼠標處于場景視圖中,按“F”鍵。使窗口以當前選擇的物體為中心。
層級面板中選擇發(fā)射器,主菜單欄選擇Game ObjectMove to view。注意發(fā)射器如何移動到FPS控制器附近的。然后使用手柄,把發(fā)射器移動到大概角色手部的位置。
注意:可以通過設置這個物體的位置來設定游戲角色是左撇子還是右撇子,不需要寫代碼。
使Unity窗口模式是“2by3”模式(windowLayouts2by3),點擊播放鍵(play)。確保層級面板中點選了發(fā)射器,四處移動角色,同時觀察場景窗口。你將發(fā)現發(fā)射器并沒有隨著角色一起運動(現在再次點擊播放鍵停止運行游戲)
下面來解決這個問題,層級面板中,把發(fā)射器拖放到FPS控制器下面的主攝像機上。彈出的對話框點擊“是”。再次運行游戲,觀察場景窗口,發(fā)射器已經和角色運動一致了。這樣我們就把發(fā)射器與攝像機關聯起來了。
創(chuàng)建飛彈
下面我們來創(chuàng)建在玩家點擊開火鍵時能夠發(fā)射出來的飛彈。
我們先用一個簡單物體-球體-代替飛彈。Unity主菜單欄點擊AssetsCreat;Prefab創(chuàng)建一個預制(Prefab)物體,命名為“Missile”
創(chuàng)建一個球體(GameObjectCreate ObjectSphere)
層級面板中,拖放球體到飛彈預制物體上(Missile),這時預制物體圖標會變化。你可以從層級面板中刪除球體。
技巧:游戲運行中產生的任何游戲物體都應該是預制物體(Prefab)。
編寫飛彈發(fā)射器腳本
FPS控制器是一個包含了幾個游戲物體和部件的預制物體。FPS控制器本身是一個只能沿Y軸旋轉的圓柱體,因此,如果我們直接把發(fā)射器腳本賦予FPS控制器的話,是實現不了上下開火的。所以我們把腳本賦予控制器中的能夠四周轉動的主攝像機。
下面我們來編寫第一個描述發(fā)射器行為的JavaScript代碼。
點擊AssetsGreateJavaScript,創(chuàng)建一個空的JavaScript文檔。一個名為“NewBehaviourScript”資源將會出現在工程面板中,把它更名為“MissileLauncher”
技巧:通過Unity;Preferences點擊External Script Editor,可以自定義外部腳本編輯器。
工程面板中創(chuàng)建一個“WeaponScripts”文件夾,放置我們所有的武器腳本。把MissileLauncher腳本和飛彈預制物體(Missile Prefab)拖到這個文件中。
我們來看看飛彈發(fā)射器的完整JavaScript腳本。
進一步思考一下,我們到底想實現什么效果?我們要檢測玩家是否按了開火鍵,然后產生一枚飛彈,然后把它沿著玩家朝向的方向按照一定的速度發(fā)射出去。我們仔細的解剖一下腳本:
var projectile: Rigibody;
var speed=20;
function Update( )
{
這是腳本的開頭部分,定義了一些屬性,開啟了“Update”的功能
if(Input.GetButtonDown(“Fire1”))
首先我們要檢測玩家是否按了開火鍵,“開火1”映射的是鼠標左鍵和當前配置的鍵盤上的按鍵(可以通過主菜單欄的Editor;Project SettingsInput設定)
{
var instantiatedProjectile: Rigidbody=Instantiate(
projectile, transform.position,transform.rotation);
我們用變量來定義產生的物體。變量的類型是Rigibody(剛體),因為飛彈是具有物理屬性的。
Unity中產生新物體使用的函數是Instantiate,它有三個參數,分別是:產生的物體、產生物體的3D空間位置、物體的旋轉。它還有另一個語法結構,參照API手冊,這里我們只使用這種結構。
第一個參數,projectile,代表我們想創(chuàng)建的物體。那么到底發(fā)射什么物體?具體產生的物體是可以手動設定的。實現方法:把Projectile定義為函數的外部變量,這樣就可以在參數面板中顯示出來。發(fā)射的物體也可以通過代碼來創(chuàng)建,但如果你想使一個變量可調的話,還是用上面的方法。
第二個參數,transform.position,使產生的物體與發(fā)射器的空間位置一致。為什么就是發(fā)射器呢?因為如果要使飛彈產生的位置沒有問題,腳本就要關聯給發(fā)射器。(transform讀取的transform數據就是被賦予腳本的游戲物體transform數據)
第三個參數transform.rotation,與第二個類似,只是它的值與發(fā)射器的旋轉值是一樣的。
代碼的下一部分使飛彈產生運動。為了實現運動,我們要賦予飛彈一個速度,但是在哪個方向上(X,Y,Z)產生速度呢?在場景中,點擊FPS控制器,出現運動箭頭(如果沒有出現,按“W”鍵),其中一個箭頭是紅色、一個是綠色、一個是藍色。紅色代表X軸,綠色代表Y軸,藍色代表Z軸。因為藍色指向的方向,與玩家面朝的方向一致,所以我們要在Z軸上給飛彈一個速度。
(Velocity)速度是instantiatedProjectile的一個屬性。我們怎么知道的呢?因為instantiatedProjectile是剛體的一種,如果我們看看API手冊,我們就會知道速度是剛體的屬性中的一種。同時也看看剛體的其它屬性。要設置速度,我們就必須在各個軸向上設定數值。但還有個小問題。3D空間中的物體一般使用兩種坐標模型:本地坐標系和世界坐標系。在本地坐標系中,物體的軸向只與物體本身有關。在世界坐標系中,軸向是絕對的,例如:向上,對所有物體來講向上的方向都是一樣的。
Rigidbody.Vellocity剛體物體速度必須使用世界坐標系。因此,定義速度時,需要把本地坐標系中的Z軸(朝前的方向)向轉換成世界坐標系中的相應方向。可以用函數transform.TransformDirection,它有三個向量作為自變量。變量speed也應該定義成外部變量,便于后面在編輯器中直接調節(jié)數值。
最后,我們要關閉飛彈與游戲角色之間的碰撞。如果不這樣做的話,飛彈產生的時候就可能與角色發(fā)生碰撞。可以在API手冊IgnoreCollision下查詢詳細信息。
MissileLauncher.js全部完整代碼如下:
把腳本MissileLauncher賦予FPS控制器中的發(fā)射器。在層級面板中點擊發(fā)射器,檢查一下參數面板下面是否顯示了MissileLauncher script。
先前創(chuàng)建的飛彈的預制物體還沒有與腳本中的變量projectile創(chuàng)建關聯,我們需要在編輯器中創(chuàng)建一下。變量projectile只能與剛體關聯,因此,首先我們要賦予飛彈一個Rigidbody。
工程面板中點擊飛彈,然后從主菜單欄選擇Components;PhysicsRigidbody。這樣將會給我們想開火發(fā)射的飛彈一個剛體屬性。我們必須確保想在游戲中發(fā)射的物體類型與腳本中外部變量要求的物體類型是同一類型的物體。
創(chuàng)建飛彈與腳本中變量projectile的鏈接。首先在層級面板中點擊發(fā)射器,然后把飛彈的預制物體從工程面板中拖拽放置在發(fā)射器參數面板中MissileLauncher script部分上。
運行游戲的話,你會發(fā)現點擊開火鍵可以發(fā)出一個受重力影響的小球了。
飛彈爆炸
下面,當飛彈與其他物體發(fā)生碰撞時,增加一個爆炸效果。要實現這個效果,我們要編寫一段新腳本賦予飛彈。
創(chuàng)建一個新腳本,命名為Projectile。拖放到工程面板的WeaponScripts文件夾下。
那么我們想要腳本Projectile實現什么樣的效果呢?我們要檢測飛彈是否發(fā)生碰撞,然后在碰撞點產生一個爆炸效果。代碼如下:
函數OnCollisionEnter內的程序代碼的作用是計算被賦予腳本的物體是否與其他物體發(fā)生碰撞。
在函數OnCollisionEnter中我們主要是要實現在3D空間中飛彈發(fā)生碰撞的點產生一個新爆炸。那么在何處了碰撞的呢?函數OnCollisionEnter就有個記錄這個信息的功能。碰撞發(fā)生的點的信息儲存在變量ContactPoint中。
這里我們使用函數Instantiate來創(chuàng)建一個爆炸。我們已經知道函數instatiate有三個參數:(1)產生的物體(2)物體的3D空間位置
(3)物體的旋轉。
第一個參數,后面我們將會賦給一個帶粒子系統(tǒng)的游戲物體。同時我們還想通過編輯器來實現這個功能,所以我們把變量設置為外部變量。
第二個參數,爆炸產生的點的位置,就是碰撞發(fā)生的位置。
第三個參數,爆炸旋轉的設置,需要解釋一下。我們需要爆炸體的Y軸方向與飛彈和其他物體發(fā)生碰撞的那個表面的法線方向一致。這就是說如果是墻面那么爆炸就面向外,如果是地板就朝上。那么實際上我們就是要使爆炸體在本地坐標系的Y軸與飛彈與之碰撞的物體的表面法線方向(世界坐標系)一致。
最后,我們要讓飛彈碰撞后就從游戲中消失,通過函數Destroy()實現,它的參數是gameObject(gameObject代表被賦予這個腳本的物體)。
Projectile.js全部代碼如下:
把腳本賦予飛彈預制物體(Missile prefab)。
下面我們要創(chuàng)建飛彈發(fā)生碰撞時所產生爆炸的爆炸效果物體。
首先,創(chuàng)建一個新的預制物體(命名為Explosion)用來存放爆炸效果資源。
標準資源包中(standard asset)有個不錯的爆炸預制物體,粒子系統(tǒng)和燈光都設置好了。把這個爆炸預制物體(在Standard Assets/Particles/explosion中)拖放到層級面板。
調節(jié)這個爆炸效果的各個參數直到你覺得滿意,然后把它從層級面板中拖放到工程面板中的爆炸預制物體(Explosion Prefab)中。
現在把爆炸配置給飛彈:
點選飛彈預制物體(Missile Prefab),在參數面板Explosion變量欄,拖放工程面板中的爆炸到上面。
定義爆炸的行為
下面我們要再創(chuàng)建一個腳本來定義爆炸自身的特性。
創(chuàng)建一個新的腳本-Explosion,放在Weapons文件夾中,雙擊腳本進行編輯。
腳本中另一個常用函數稱為Start()。當它配置給的物體是在游戲中產生的時候,函數Start()中的代碼只被執(zhí)行一次。我們要實現的效果就是在一定時間后,在游戲中刪除爆炸。我們通過函數Destroy()的第二個參數實現,它的作用是定義執(zhí)行刪除前的時間長度。
變量explosionTime設置成外部變量,方便調節(jié)。
新建腳本插入以上代碼時,要刪除函數Update()。
把腳本Explosion賦予給爆炸預制物體。
音效
目前的游戲世界太安靜了,讓我們給爆炸效果增加點音效。
首先,給爆炸預制(Prefab)添加一段音頻。
給爆炸添加音效前,我們首先要添加一個音源部件(Audio Source),在主菜單點擊Component—Audio—Audio Source。你會發(fā)現音源部件有一個Audio Clip的屬性。
把“RocketLauncherImpact”音效添加給爆炸預制體的AudioClip外部變量。Unity支持多種音頻格式。
運行游戲,發(fā)射飛彈的時候就有聲音了!
添加圖形界面
下面我們來添加GUI,有點像頭部顯示設備(HUD)。我們要做的GUI非常簡單,就一個準星。
添加一個準星:
工程欄中創(chuàng)建一個GUI的文件夾。
創(chuàng)建一個新腳本,命名為“準星”(Crosshair),拖到GUI文件夾。
Crosshair中寫入下面的腳本:
首先我們設定了兩個變量。第一個變量是定義我們將要用可選的方式來選擇圖形紋理。第二個變量定義了一個方形區(qū)間,它是圖形紋理在屏幕上的位置范圍。
在start( ) 中函數用來設定圖形紋理在屏幕上的位置。函數中,有四個參數,用來定義方形區(qū)域的大小和位置。第一個參數定義了方形區(qū)域的左邊框,第二個是底邊框,第三和第四個參數定義了寬和高。
OnGUI( )函數中,使用GUI類程序來讓圖形顯示在屏幕上。DrawTexture( )函數的參數position和crosshairTexture將使準星顯示在屏幕的中央位置。
保存腳本。
創(chuàng)建一個新的空物體,命名為“GUI”。
把腳本“Crosshair”賦予給GUI物體。
點選GUI物體,把在文件夾Texturelaim下的欲使用的圖形拖放到參數面板變量Crosshair Texture中。
運行游戲,屏幕中就會有準星顯示了。
物理特效:
現在,我們想要游戲中的物體效果越真實越好,這是通過添加物理特效實現的。在這一節(jié)中,我們將在環(huán)境中添加一些物體,他們能被飛彈擊中后有相應的反應。首先有幾個新概念要解釋下。
校正(Update)
先前,我們在函數Update()中寫入代碼,這樣可以在每一幀都執(zhí)行其中的代碼。其中有個例子是檢測玩家點擊開火鍵。幀速并不是一個固定值,它是根據場景復雜度等因素來定的。各幀之間的時間差會導致不穩(wěn)定的物體反應。因此,如果想在場景中添加有物理反應的物體(剛體等),代碼就應該寫在函數FixedUpdate()中。Unity中deltaTime的值用來測定渲染兩個連續(xù)幀的所用時間。
一般而言,函數Update與FixedUpdate之間的區(qū)別如下:
Update()-其中的代碼通常用于角色行為、游戲邏輯等。這個函數中的deltaTime值并不是固定的。
FixedUpdate()-其中的代碼通常用于剛體物體(物理屬性的行為)。函數中deltaTime的值通常是固定的。
FixedUpdate函數被調用的頻率是主菜單中Edit-Project Settings-Time的FixedTimestep屬性確定的,當然也是可以更改的。第二個屬性Time Scale是讀取每秒的幀速和相應的倒數值。
技巧:定義FixedTimestep值時,要注意把握好一個平衡:值越小,物理效果越真實越好,但影響游戲運行速度。應該同時確保游戲運行速度和物理效果的真實性。
最后說一下yield,它相當于暫停當前正在執(zhí)行的函數。
回到游戲,我們想實現的效果:
使玩家可以發(fā)射飛彈(已經實現了)。
如果飛彈與其它剛體物體發(fā)生碰撞,檢測其范圍類是否有其它被賦予剛體屬性的物體。
對爆炸沖擊力范圍內的每個剛體物體,均給予一個upwards方向上的力,使它們對飛彈產生反應。
讓我們看看修改后的爆炸腳本(Explosion Javascript)
首先檢測下飛彈落點周圍是否有帶碰撞器的物體。函數Physics.OverlapSphere()有兩個參數:3D位置和半徑值,然后返回一組檢測到的在半徑內的碰撞器的數組。
一旦得到這些數組后,就會對每個對應碰撞器的剛體物體一個在特定方向上的力。
然后我們在飛彈的炸點處,向上的方向增加一個力(ExplosionPower)。但是,爆炸效果是隨著距離而遞減的,作用力大小不能在整個半徑內都一樣。圓周位置的剛體物體受到的作用力應該比炸點中心處小。函數把這種效果也考慮在內的。通過調節(jié)外部變量explosionPower和explosionRadius的值,可以較容易的得到想要的效果。
源碼編程器怎么玩其他小游戲的
1、首先啟動源碼編輯器,將原有的積木和角色全部刪除。
2、打開素材庫,將所需背景和角色增加進來。
3、進行排列好。
4、選中暫停這個角色,在舞臺中拖入下列積木
5、中開始按鈕角色,拖入下列積木即可。
用C++編寫的小游戲源代碼
五子棋的代碼:
#includeiostream
#includestdio.h
#includestdlib.h
#include time.h
using namespace std;
const int N=15;? ? ? ? ? ? ? ? ?//15*15的棋盤
const char ChessBoardflag = ' ';? ? ? ? ? //棋盤標志
const char flag1='o';? ? ? ? ? ? ? //玩家1或電腦的棋子標志
const char flag2='X';? ? ? ? ? ? ? //玩家2的棋子標志
typedef struct Coordinate? ? ? ? ? //坐標類
{?
int x;? ? ? ? ? ? ? ? ? ? ? ? ?//代表行
int y;? ? ? ? ? ? ? ? ? ? ? ? ?//代表列
}Coordinate;
class GoBang? ? ? ? ? ? ? ? ? ? //五子棋類
{
public:
GoBang()? ? ? ? ? ? ? ? //初始化
{
InitChessBoard();
}
void Play()? ? ? ? ? ? ? ?//下棋
{
Coordinate Pos1;? ? ? // 玩家1或電腦
Coordinate Pos2;? ? ? //玩家2
int n = 0;
while (1)
{
int mode = ChoiceMode();
while (1)
{
if (mode == 1)? ? ? ?//電腦vs玩家
{
ComputerChess(Pos1,flag1);? ? ?// 電腦下棋
if (GetVictory(Pos1, 0, flag1) == 1)? ? ?//0表示電腦,真表示獲勝
break;
PlayChess(Pos2, 2, flag2);? ? ?//玩家2下棋
if (GetVictory(Pos2, 2, flag2))? ? ?//2表示玩家2
break;
}
else? ? ? ? ? ? //玩家1vs玩家2
{
PlayChess(Pos1, 1, flag1);? ? ?// 玩家1下棋
if (GetVictory(Pos1, 1, flag1))? ? ? //1表示玩家1
break;
PlayChess(Pos2, 2, flag2);? ? ?//玩家2下棋
if (GetVictory(Pos2, 2, flag2))? //2表示玩家2
break;
}
}
cout "***再來一局***" endl;
cout "y or n :";
char c = 'y';
cin c;
if (c == 'n')
break;
}? ? ?
}
protected:
int ChoiceMode()? ? ? ? ? ?//選擇模式
{
int i = 0;
system("cls");? ? ? ? //系統(tǒng)調用,清屏
InitChessBoard();? ? ? ?//重新初始化棋盤
cout "***0、退出? 1、電腦vs玩家? 2、玩家vs玩家***" endl;
while (1)
{
cout "請選擇:";
cin i;
if (i == 0)? ? ? ? ?//選擇0退出
exit(1);
if (i == 1 || i == 2)
return i;
cout "輸入不合法" endl;
}
}
void InitChessBoard()? ? ? //初始化棋盤
{
for (int i = 0; i N + 1; ++i)? ?
{
for (int j = 0; j N + 1; ++j)
{
_ChessBoard[i][j] = ChessBoardflag;
}
}
}
void PrintChessBoard()? ? //打印棋盤,這個函數可以自己調整
{
system("cls");? ? ? ? ? ? ? ? //系統(tǒng)調用,清空屏幕
for (int i = 0; i N+1; ++i)
{
for (int j = 0; j N+1; ++j)
{
if (i == 0)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//打印列數字
{
if (j!=0)
printf("%d? ", j);
else
printf("? ?");
}
else if (j == 0)? ? ? ? ? ? ? ? //打印行數字
printf("%2d ", i);
else
{
if (i N+1)
{
printf("%c |",_ChessBoard[i][j]);
}
}
}
cout endl;
cout "? ?";
for (int m = 0; m N; m++)
{
printf("--|");
}
cout endl;
}
}
void PlayChess(Coordinate pos, int player, int flag)? ? ? ?//玩家下棋
{
PrintChessBoard();? ? ? ? ?//打印棋盤
while (1)
{
printf("玩家%d輸入坐標:", player);
cin pos.x pos.y;
if (JudgeValue(pos) == 1)? ? ? ? ? //坐標合法
break;
cout "坐標不合法,重新輸入" endl;
}
_ChessBoard[pos.x][pos.y] = flag;
}
void ComputerChess(Coordinate pos, char flag)? ? ? ?//電腦下棋
{
PrintChessBoard();? ? ? ? ?//打印棋盤
int x = 0;
int y = 0;
while (1)
{
x = (rand() % N) + 1;? ? ? //產生1~N的隨機數
srand((unsigned int) time(NULL));
y = (rand() % N) + 1;? ? ?//產生1~N的隨機數
srand((unsigned int) time(NULL));
if (_ChessBoard[x][y] == ChessBoardflag)? ? ? //如果這個位置是空的,也就是沒有棋子
break;
}
pos.x = x;
pos.y = y;
_ChessBoard[pos.x][pos.y] = flag;
}
int JudgeValue(const Coordinate pos)? ? ? ?//判斷輸入坐標是不是合法
{
if (pos.x 0 pos.x = Npos.y 0 pos.y = N)
{
if (_ChessBoard[pos.x][pos.y] == ChessBoardflag)
{
return 1;? ? //合法
}
}
return 0;? ? ? ? //非法
}
int JudgeVictory(Coordinate pos, char flag)? ? ? ? ? ?//判斷有沒有人勝負(底層判斷)
{
int begin = 0;
int end = 0;
int begin1 = 0;
int end1 = 0;
//判斷行是否滿足條件
(pos.y - 4) 0 ? begin = (pos.y - 4) : begin = 1;
(pos.y + 4) N ? end = N : end = (pos.y + 4);
for (int i = pos.x, j = begin; j + 4 = end; j++)
{
if (_ChessBoard[i][j] == flag_ChessBoard[i][j + 1] == flag
_ChessBoard[i][j + 2] == flag_ChessBoard[i][j + 3] == flag
_ChessBoard[i][j + 4] == flag)
return 1;
}
//判斷列是否滿足條件
(pos.x - 4) 0 ? begin = (pos.x - 4) : begin = 1;
(pos.x + 4) N ? end = N : end = (pos.x + 4);
for (int j = pos.y, i = begin; i + 4 = end; i++)
{
if (_ChessBoard[i][j] == flag_ChessBoard[i + 1][j] == flag
_ChessBoard[i + 2][j] == flag_ChessBoard[i + 3][j] == flag
_ChessBoard[i + 4][j] == flag)
return 1;
}
int len = 0;
//判斷主對角線是否滿足條件
pos.x pos.y ? len = pos.y - 1 : len = pos.x - 1;
if (len 4)
len = 4;
begin = pos.x - len;? ? ? ?//橫坐標的起始位置
begin1 = pos.y - len;? ? ? //縱坐標的起始位置
pos.x pos.y ? len = (N - pos.x) : len = (N - pos.y);
if (len4)
len = 4;
end = pos.x + len;? ? ? ?//橫坐標的結束位置
end1 = pos.y + len;? ? ? //縱坐標的結束位置
for (int i = begin, j = begin1; (i + 4 = end) (j + 4 = end1); ++i, ++j)
{
if (_ChessBoard[i][j] == flag_ChessBoard[i + 1][j + 1] == flag
_ChessBoard[i + 2][j + 2] == flag_ChessBoard[i + 3][j + 3] == flag
_ChessBoard[i + 4][j + 4] == flag)
return 1;
}
//判斷副對角線是否滿足條件
(pos.x - 1) (N - pos.y) ? len = (N - pos.y) : len = pos.x - 1;
if (len 4)
len = 4;
begin = pos.x - len;? ? ? ?//橫坐標的起始位置
begin1 = pos.y + len;? ? ? //縱坐標的起始位置
(N - pos.x) (pos.y - 1) ? len = (pos.y - 1) : len = (N - pos.x);
if (len4)
len = 4;
end = pos.x + len;? ? ? ?//橫坐標的結束位置
end1 = pos.y - len;? ? ? //縱坐標的結束位置
for (int i = begin, j = begin1; (i + 4 = end) (j - 4 = end1); ++i, --j)
{
if (_ChessBoard[i][j] == flag_ChessBoard[i + 1][j - 1] == flag
_ChessBoard[i + 2][j - 2] == flag_ChessBoard[i + 3][j - 3] == flag
_ChessBoard[i + 4][j - 4] == flag)
return 1;
}
for (int i = 1; i N + 1; ++i)? ? ? ? ? ?//棋盤有沒有下滿
{
for (int j =1; j N + 1; ++j)
{
if (_ChessBoard[i][j] == ChessBoardflag)
return 0;? ? ? ? ? ? ? ? ? ? ? //0表示棋盤沒滿
}
}
return -1;? ? ? //和棋
}
bool GetVictory(Coordinate pos, int player, int flag)? ?//對JudgeVictory的一層封裝,得到具體那個玩家獲勝
{
int n = JudgeVictory(pos, flag);? ?//判斷有沒有人獲勝
if (n != 0)? ? ? ? ? ? ? ? ? ? //有人獲勝,0表示沒有人獲勝
{
PrintChessBoard();
if (n == 1)? ? ? ? ? ? ? ? //有玩家贏棋
{
if (player == 0)? ? ?//0表示電腦獲勝,1表示玩家1,2表示玩家2
printf("***電腦獲勝***\n");
else
printf("***恭喜玩家%d獲勝***\n", player);
}
else
printf("***雙方和棋***\n");
return true;? ? ? //已經有人獲勝
}
return false;? ?//沒有人獲勝
}
private:
char _ChessBoard[N+1][N+1];? ?
};
擴展資料:
設計思路
1、進行問題分析與設計,計劃實現的功能為,開局選擇人機或雙人對戰(zhàn),確定之后比賽開始。
2、比賽結束后初始化棋盤,詢問是否繼續(xù)比賽或退出,后續(xù)可加入復盤、悔棋等功能。
3、整個過程中,涉及到了棋子和棋盤兩種對象,同時要加上人機對弈時的AI對象,即涉及到三個對象。
如何使用construct2制作射擊小游戲
你可以使用官方的模塊(template)。選擇shooting games template來參考,他會給你一個簡單的游戲編程和畫面,過后可以自己修改。
跪求用C++語言編寫的小游戲的源代碼
像素射擊:int anim abc_fade_in 0x7f010001
int anim abc_fade_out 0x7f010002
int anim abc_grow_fade_in_from_bottom 0x7f010003
int anim abc_popup_enter 0x7f010004
int anim abc_popup_exit 0x7f010005
int anim abc_shrink_fade_out_from_bottom 0x7f010006
int anim abc_slide_in_bottom 0x7f010007
int anim abc_slide_in_top 0x7f010008
int anim abc_slide_out_bottom 0x7f010009
int anim abc_slide_out_top 0x7f01000a
int anim abc_tooltip_enter 0x7f01000b
int anim abc_tooltip_exit 0x7f01000c
int attr actionBarDivider 0x7f040001
int attr actionBarItemBackground 0x7f040002
int attr actionBarPopupTheme 0x7f040003
int attr actionBarSize 0x7f040004
int attr actionBarSplitStyle 0x7f040005
int attr actionBarStyle 0x7f040006
int attr actionBarTabBarStyle 0x7f040007
int attr actionBarTabStyle 0x7f040008
int attr actionBarTabTextStyle 0x7f040009
int attr actionBarTheme 0x7f04000a
int attr actionBarWidgetTheme 0x7f04000b
int attr actionButtonStyle 0x7f04000c
int attr actionDropDownStyle 0x7f04000d
int attr actionLayout 0x7f04000e
int attr actionMenuTextAppearance 0x7f04000f
int attr actionMenuTextColor 0x7f040010
int attr actionModeBackground 0x7f040011
int attr actionModeCloseButtonStyle 0x7f040012
int attr actionModeCloseDrawable 0x7f040013
int attr actionModeCopyDrawable 0x7f040014
int attr actionModeCutDrawable 0x7f040015
int attr actionModeFindDrawable 0x7f040016
int attr actionModePasteDrawable 0x7f040017
int attr actionModePopupWindowStyle 0x7f040018
int attr actionModeSelectAllDrawable 0x7f040019
int attr actionModeShareDrawable 0x7f04001a
int attr actionModeSplitBackground 0x7f04001b
int attr actionModeStyle 0x7f04001c
int attr actionModeWebSearchDrawable 0x7f04001d
int attr actionOverflowButtonStyle 0x7f04001e
int attr actionOverflowMenuStyle 0x7f04001f
int attr actionProviderClass 0x7f040020
int attr actionViewClass 0x7f040021
int attr activityChooserViewStyle 0x7f040022
int attr alertDialogButtonGroupStyle 0x7f040023
int attr alertDialogCenterButtons 0x7f040024
int attr alertDialogStyle 0x7f040025
int attr alertDialogTheme 0x7f040026
int attr allowStacking 0x7f040027
int attr alpha 0x7f040028
int attr alphabeticModifiers 0x7f040029
int attr arrowHeadLength 0x7f04002a
int attr arrowShaftLength 0x7f04002b
int attr autoCompleteTextViewStyle 0x7f04002c
int attr autoSizeMaxTextSize 0x7f04002d
int attr autoSizeMinTextSize 0x7f04002e
int attr autoSizePresetSizes 0x7f04002f
int attr autoSizeStepGranularity 0x7f040030
int attr autoSizeTextType 0x7f040031
int attr background 0x7f040032
int attr backgroundSplit 0x7f040033
int attr backgroundStacked 0x7f040034
int attr backgroundTint 0x7f040035
int attr backgroundTintMode 0x7f040036
int attr barLength 0x7f040037
int attr borderlessButtonStyle 0x7f040038
int attr buttonBarButtonStyle 0x7f040039
int attr buttonBarNegativeButtonStyle 0x7f04003a
int attr buttonBarNeutralButtonStyle 0x7f04003b
int attr buttonBarPositiveButtonStyle 0x7f04003c
int attr buttonBarStyle 0x7f04003d
int attr buttonGravity 0x7f04003e
int attr buttonIconDimen 0x7f04003f
int attr buttonPanelSideLayout 0x7f040040
int attr buttonStyle 0x7f040041
int attr buttonStyleSmall 0x7f040042
int attr buttonTint 0x7f040043
int attr buttonTintMode 0x7f040044
int attr checkboxStyle 0x7f040045
int attr checkedTextViewStyle 0x7f040046
int attr closeIcon 0x7f040047
int attr closeItemLayout 0x7f040048
int attr collapseContentDescription 0x7f040049
int attr collapseIcon 0x7f04004a
int attr color 0x7f04004b
int attr colorAccent 0x7f04004c
int attr colorBackgroundFloating 0x7f04004d
int attr colorButtonNormal 0x7f04004e
int attr colorControlActivated 0x7f04004f
int attr colorControlHighlight 0x7f040050
int attr colorControlNormal 0x7f040051
int attr colorError 0x7f040052
int attr colorPrimary 0x7f040053
int attr colorPrimaryDark 0x7f040054
int attr colorSwitchThumbNormal 0x7f040055
int attr commitIcon 0x7f040056
int attr contentDescription 0x7f040057
int attr contentInsetEnd 0x7f040058
int attr contentInsetEndWithActions 0x7f040059
int attr contentInsetLeft 0x7f04005a
int attr contentInsetRight 0x7f04005b
int attr contentInsetStart 0x7f04005c
int attr contentInsetStartWithNavigation 0x7f04005d
int attr controlBackground 0x7f04005e
int attr coordinatorLayoutStyle 0x7f04005f
int attr customNavigationLayout 0x7f040060
int attr defaultQueryHint 0x7f040061
int attr dialogCornerRadius 0x7f040062
int attr dialogPreferredPadding 0x7f040063
int attr dialogTheme 0x7f040064
int attr displayOptions 0x7f040065
int attr divider 0x7f040066
int attr dividerHorizontal 0x7f040067
int attr dividerPadding 0x7f040068
int attr dividerVertical 0x7f040069
int attr drawableSize 0x7f04006a
int attr drawerArrowStyle 0x7f04006b
int attr dropDownListViewStyle 0x7f04006c
int attr dropdownListPreferredItemHeight 0x7f04006d
int attr editTextBackground 0x7f04006e
int attr editTextColor 0x7f04006f
int attr editTextStyle 0x7f040070
int attr elevation 0x7f040071
int attr expandActivityOverflowButtonDrawable 0x7f040072
int attr firstBaselineToTopHeight 0x7f040073
int attr font 0x7f040074
int attr fontFamily 0x7f040075
int attr fontProviderAuthority 0x7f040076
int attr fontProviderCerts 0x7f040077
int attr fontProviderFetchStrategy 0x7f040078
int attr fontProviderFetchTimeout 0x7f040079
int attr fontProviderPackage 0x7f04007a
int attr fontProviderQuery 0x7f04007b
int attr fontStyle 0x7f04007c
int attr fontVariationSettings 0x7f04007d
int attr fontWeight 0x7f04007e
int attr gapBetweenBars 0x7f04007f
int attr goIcon 0x7f040080
int attr height 0x7f040081
int attr hideOnContentScroll 0x7f040082
int attr homeAsUpIndicator 0x7f040083
int attr homeLayout 0x7f040084
int attr icon 0x7f040085
int attr iconTint 0x7f040086
int attr iconTintMode 0x7f040087
int attr iconifiedByDefault 0x7f040088
int attr imageButtonStyle 0x7f040089
int attr indeterminateProgressStyle 0x7f04008a
int attr initialActivityCount 0x7f04008b
int attr isLightTheme 0x7f04008c
int attr itemPadding 0x7f04008d
int attr keylines 0x7f04008e
int attr lastBaselineToBottomHeight 0x7f04008f
int attr layout 0x7f040090
int attr layout_anchor 0x7f040091
int attr layout_anchorGravity 0x7f040092
int attr layout_behavior 0x7f040093
int attr layout_dodgeInsetEdges 0x7f040094
int attr layout_insetEdge 0x7f040095
int attr layout_keyline 0x7f040096
int attr lineHeight 0x7f040097
int attr listChoiceBackgroundIndicator 0x7f040098
int attr listDividerAlertDialog 0x7f040099
int attr listItemLayout 0x7f04009a
int attr listLayout 0x7f04009b
int attr listMenuViewStyle 0x7f04009c
int attr listPopupWindowStyle 0x7f04009d
int attr listPreferredItemHeight 0x7f04009e
int attr listPreferredItemHeightLarge 0x7f04009f
int attr listPreferredItemHeightSmall 0x7f0400a0
int attr listPreferredItemPaddingLeft 0x7f0400a1
int attr listPreferredItemPaddingRight 0x7f0400a2
int attr logo 0x7f0400a3
int attr logoDescription 0x7f0400a4
int attr maxButtonHeight 0x7f0400a5
int attr measureWithLargestChild 0x7f0400a6
int attr multiChoiceItemLayout 0x7f0400a7
int attr navigationContentDescription 0x7f0400a8
int attr navigationIcon 0x7f0400a9
int attr navigationMode 0x7f0400aa
int attr numericModifiers 0x7f0400ab
int attr overlapAnchor 0x7f0400ac
int attr paddingBottomNoButtons 0x7f0400ad
int attr paddingEnd 0x7f0400ae
int attr paddingStart 0x7f0400af
int attr paddingTopNoTitle 0x7f0400b0
int attr panelBackground 0x7f0400b1
int attr panelMenuListTheme 0x7f0400b2
int attr panelMenuListWidth 0x7f0400b3
int attr popupMenuStyle 0x7f0400b4
int attr popupTheme 0x7f0400b5
int attr popupWindowStyle 0x7f0400b6
int attr preserveIconSpacing 0x7f0400b7
int attr progressBarPadding 0x7f0400b8
int attr progressBarStyle 0x7f0400b9
int attr queryBackground 0x7f0400ba
int attr queryHint 0x7f0400bb
int attr radioButtonStyle 0x7f0400bc
int attr ratingBarStyle 0x7f0400bd
int attr ratingBarStyleIndicator 0x7f0400be
int attr ratingBarStyleSmall 0x7f0400bf
int attr searchHintIcon 0x7f0400c0
int attr searchIcon 0x7f0400c1
int attr searchViewStyle 0x7f0400c2
int attr seekBarStyle 0x7f0400c3
int attr selectableItemBackground 0x7f0400c4
int attr selectableItemBackgroundBorderless 0x7f0400c5
int attr showAsAction 0x7f0400c6
int attr showDividers 0x7f0400c7
int attr showText 0x7f0400c8
int attr showTitle 0x7f0400c9
int attr singleChoiceItemLayout 0x7f0400ca
int attr spinBars 0x7f0400cb
int attr spinnerDropDownItemStyle 0x7f0400cc
int attr spinnerStyle 0x7f0400cd
int attr splitTrack 0x7f0400ce
int attr srcCompat 0x7f0400cf
int attr state_above_anchor 0x7f0400d0
int attr statusBarBackground 0x7f0400d1
int attr subMenuArrow 0x7f0400d2
int attr submitBackground 0x7f0400d3
int attr subtitle 0x7f0400d4
int attr subtitleTextAppearance 0x7f0400d5
int attr subtitleTextColor 0x7f0400d6
int attr subtitleTextStyle 0x7f0400d7
int attr suggestionRowLayout 0x7f0400d8
int attr switchMinWidth 0x7f0400d9
int attr switchPadding 0x7f0400da
int attr switchStyle 0x7f0400db
int attr switchTextAppearance 0x7f0400dc
int attr textAllCaps 0x7f0400dd
int attr textAppearanceLargePopupMenu 0x7f0400de
int attr textAppearanceListItem 0x7f0400df
int attr textAppearanceListItemSecondary 0x7f0400e0
int attr textAppearanceListItemSmall 0x7f0400e1
int attr textAppearancePopupMenuHeader 0x7f0400e2
int attr textAppearanceSearchResultSubtitle 0x7f0400e3
int attr textAppearanceSearchResultTitle 0x7f0400e4
int attr textAppearanceSmallPopupMenu 0x7f0400e5
int attr textColorAlertDialogListItem 0x7f0400e6
int attr textColorSearchUrl 0x7f0400e7
int attr theme 0x7f0400e8
int attr thickness 0x7f0400e9
int attr thumbTextPadding 0x7f0400ea
int attr thumbTint 0x7f0400eb
int attr thumbTintMode 0x7f0400ec
int attr tickMark 0x7f0400ed
int attr tickMarkTint 0x7f0400ee
int attr tickMarkTintMode 0x7f0400ef
int attr tint 0x7f0400f0
int attr tintMode 0x7f0400f1
int attr title 0x7f0400f2
int attr titleMargin 0x7f0400f3
int attr titleMarginBottom 0x7f0400f4
int attr titleMarginEnd 0x7f0400f5
int attr titleMarginStart 0x7f0400f6
int attr titleMarginTop 0x7f0400f7
int attr titleMargins 0x7f0400f8
int attr titleTextAppearance 0x7f0400f9
int attr titleTextColor 0x7f
關于用源碼編輯器制作射擊小游戲和源碼編輯器怎么玩的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。
掃描二維碼推送至手機訪問。
版權聲明:本文由飛速云SEO網絡優(yōu)化推廣發(fā)布,如需轉載請注明出處。