當前位置:首頁 » 游戲種類 » 安卓開發小游戲

安卓開發小游戲

發布時間: 2023-01-30 01:56:32

1. Android小游戲 之《數字華容道》

[toc]

最近看《最強大腦》,看到其中的「數字華容道」這個小游戲挺有意思,於是萌生了自己寫一個的想法,正好結合之前的文章 《Android開發藝術探索》第4章 View的工作原理 ,順便復習一下。
GitHub鏈接: https://github.com/LittleFogCat/Shuzihuarong

說做就做。
經過一夜的粗製濫造,初版已經完成,現在復盤一下詳細過程。

在4x4的方格棋盤中,擺放了1 15一共十五個棋子。玩家需要在最短時間內,移動棋子將1 15按順序排列好。

本文app結構很簡單,分為三個界面:目錄,游戲,高分榜。分別對應的是MenuAcitivity、GameActivity、HighScoreActivity。其中MenuActivity為主界面。

新建棋盤類 BoardView ,繼承自ViewGroup。在xml文件中直接加入BoardView即可。
新建棋子類 CubeView ,繼承自TextView。

棋子只包含一個數字,所以簡單的繼承自TextView即可。由於我們還需要比對棋子是否在正確的位置,所以我們還需要給每個棋子加上數字和位置屬性。

這里,我們定義了一個類Position,用於描述棋子在棋盤中的位置。

我們參考Android系統屏幕坐標系,以棋盤左上角為零點,每向右一格橫坐標加一,每向下一格縱坐標加一。如圖:

接下來,我們開始定義棋盤View:BoardView,這也是這個游戲的重頭戲。

首先,考慮需要添加哪些屬性。由於時間關系,我這里只加入了棋盤尺寸。
在style.xml文件中加入:

其中sizeH為棋盤列數,sizeV為棋盤行數。(默認4x4大小,以下文中均以4x4為例)
分別對應BoardView的 mSizeX 和 mSizeY 屬性。

首先我們新建一個 cube_view.xml ,作為單顆棋子的布局。在BoardView的構造方法中,我們使用LayoutInflater將總共15顆棋子載入出來,並指定它們的位置,逐一保存在mChildren數組中。

最後,我們記錄了沒有棋子的空格所在位置 mBlankPos 。這個位置很關鍵,因為我們之後的的操作中都是圍繞這個空格來的。

measure和layout的過程很簡單,這里由於是自己使用,假定寬高都是定值。因為之前所有的CubeView都沒有定義寬高,默認是0,所以在onMeasure中,我們使用BoardView的寬除以列數,高除以行數,得到每顆棋子的寬高並給其賦值。這樣處理雖然很粗放,但是只是試玩的話並沒有什麼影響。

我是按照從左往右、從上往下的方式依次排列棋子,並且沒有考慮棋子的margin屬性,所以onLayout很簡單:

至此,棋子在棋盤中就已經排列好了。

一開始的時候,我考慮的是,生成1~15的不重復隨機數,然後依次給CubeView賦值即可。即:

雖然看起來是能行得通的,但是在實際的游戲過程中,遇到了非常嚴重的問題,那就是會出現無解的死局,也就是說無論如何都不可能解出來的棋局。經過網上搜索之後證實了這個bug的存在,而且市面上流傳的該類app很多都是有這個bug的!所以這個辦法就被廢棄掉了,得想一個新的方法。
由於必須是按照順序放置然後打亂的棋局才能保證有解,不能隨機亂放置,所以我就模擬手動打亂,寫了一個新的棋局生成器:

原理很簡單,因為空格的位置是唯一的,那麼我們把空格的上下左右四個棋子隨機找出一個,與空格互換位置,也就模擬了一次手動點擊。當點擊的次數足夠多時(這里循環了10000次),就可以看做是已經打亂的棋盤了。
最後把生成好的棋盤,保存在一個二維數組中即可。

(因為有個10000次的循環,我擔心時間過長,於是將其放在線程中執行,但是後來我覺得自己多此一舉了。)

然後,在BoardView中定義一個setData方法,來把生成好的棋局裝進來:

這樣,就完成了棋局的生成。

游戲過程基本是極簡的。
在初始化方法中(2.1),我們給每個棋子都定義了點擊事件,模擬真實場景。具體來講,就是當我們點擊一個棋子的時候:如果棋子在空格周圍,則將棋子移動到空格處;反之,則不進行任何操作。(如果設置滑動同理)
這樣我們的Position類就派上用場了。
在2.1的 init() 方法中,我們有這么一句:

即是,當我們點擊了其中一個棋子時,會觸發 moveChildToBlank(view) 方法。這個方法的目的正是上面所說。

在移動棋子之後,我們需要檢查一下是否是正確排列的順序,如果是的話,那麼表明游戲完成。

首先創建HighScore類,包含姓名,用時,步數,時間。

高分榜使用SharedPreferences+Gson,將一個List<HighScore>轉換為json形式保存在本地。

最佳成績的記錄是在GameActivity中完成的。流程如下:

總的來說,邏輯簡單清晰。

自己開發的自然是需要作弊功能了!暫且不表。

由於只用了一個晚上完成,所以還很粗糙,很多功能不夠完善,而且也沒做適配和測試,難免會有bug存在。主要是把思路記錄下來,方便以後自己和他人做個參考。

數字華容道GitHub地址: https://github.com/LittleFogCat/Shuzihuarong

2. 求一個安卓開發小游戲源代碼,臨時交作業用

package com.fiveChess;

import android.app.Activity;
import android.os.Bundle;
import android.view.Display;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity {
GameView gameView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
Display display = this.getWindowManager().getDefaultDisplay();
gameView = new GameView(this,display.getWidth(),display.getHeight());
setContentView(gameView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("重新開始").setIcon(android.R.drawable.ic_menu_myplaces);
menu.add("退出");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getTitle().equals("重新開始")){
gameView.canPlay = true;
gameView.chess = new int[gameView.row][gameView.col];
gameView.invalidate();
}else if(item.getTitle().equals("退出")){
finish();
}
return super.onOptionsItemSelected(item);
}
}

package com.fiveChess;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.view.MotionEvent;
import android.view.View;

public class GameView extends View {
Context context = null;
int screenWidth,screenHeight;
String message = "";//提示輪到哪個玩家
int row,col; //劃線的行數和列數
int stepLength = 30;//棋盤每格間距
int[][] chess = null;//0代表沒有棋子,1代表是黑棋,2代表白旗
boolean isBlack = true;
boolean canPlay = true;
public GameView(Context context,int screenWidth,int screenHeight) {
super(context);
this.context = context;
this.screenWidth = screenWidth;
this.screenHeight = screenHeight;
this.message = "黑棋先行";
row = (screenHeight-50)/stepLength+1;
col = (screenWidth-10)/stepLength+1;
chess = new int[row][col];

}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.WHITE);
canvas.drawRect(0, 0, screenWidth, screenHeight, paint);//畫背景
paint.setColor(Color.BLUE);
paint.setTextSize(25);
canvas.drawText(message, (screenWidth-100)/2, 30, paint);//畫最頂層的字
paint.setColor(Color.BLACK);
//畫棋盤
for(int i=0;i<row;i++){
canvas.drawLine(10, 50+i*stepLength, 10+(col-1)*stepLength, 50+i*stepLength, paint);
}
for(int i=0;i<col;i++){
canvas.drawLine(10+i*stepLength,50,10+i*stepLength,50+(row-1)*stepLength, paint);
}

for(int r=0;r<row;r++){
for(int c=0;c<col;c++){
if(chess[r][c] == 1){
paint.setColor(Color.BLACK);
paint.setStyle(Style.FILL);
canvas.drawCircle(10+c*stepLength, 50+r*stepLength, 10, paint);
}else if(chess[r][c] == 2){
//畫白棋
paint.setColor(Color.WHITE);
paint.setStyle(Style.FILL);
canvas.drawCircle(10+c*stepLength, 50+r*stepLength, 10, paint);

paint.setColor(Color.BLACK);
paint.setStyle(Style.STROKE);
canvas.drawCircle(10+c*stepLength, 50+r*stepLength, 10, paint);
}
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(!canPlay){return false;}
float x = event.getX();
float y = event.getY();
int r = Math.round((y-50)/stepLength);
int c = Math.round((x-10)/stepLength);
if(r<0 || r>row-1 || c<0 || c>col-1){return false;}
if(chess[r][c]!=0){return false;}//若有棋子則不再畫棋子了
if(isBlack){
chess[r][c] = 1;
isBlack = false;
message = "輪到白棋";
}else{
chess[r][c] = 2;
isBlack = true;
message = "輪到黑棋";
}
invalidate();
if(judge(r, c,0,1)) return false;
if(judge(r, c,1,0)) return false ;
if(judge(r, c,1,1)) return false;
if(judge(r, c,1,-1)) return false;

return super.onTouchEvent(event);
}
private boolean judge(int r, int c,int x,int y) {//r,c表示行和列,x表示在y方向上的偏移,y表示在x方向上的偏移
int count = 1;
int a = r;
int b = c;
while(r>=0 && r<row && c>=0 && c<col && r+x>=0 && r+x<row && c+y>=0 && c+y<col && chess[r][c] == chess[r+x][c+y]){
count++;
if(y>0){
c++;
}else if(y<0){
c--;
}
if(x>0){
r++;
}else if(x<0){
r--;
}
}
while(a>=0 && a<row && b>=0 && b<col && a-x>=0 && a-x<row && b-y>=0 && b-y<col && chess[a][b] == chess[a-x][b-y]){
count++;
if(y>0){
b--;
}else if(y<0){
b++;
}
if(x>0){
a--;
}else if(x<0){
a++;
}
}
if(count>=5){
String str = "";
if(isBlack){
str = "白棋勝利";
}else{
str = "黑棋勝利";
}
new AlertDialog.Builder(context).setTitle("游戲結束").setMessage(str).setPositiveButton("重新開始", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
chess = new int[row][col];
invalidate();

}
}).setNegativeButton("觀看棋局", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
canPlay = false;

}
}).show();
return true;
}

return false;
}
}
PS:五子棋,無需圖片,直接在程序里畫出來的。注意我發的是兩個文件,一個activity,一個類文件,別把它當成一個文件了

3. 怎樣製作網頁游戲

很多人想投身游戲行業,成為真正的游戲製作人。但是他們對游戲的製作過程,和各個職位的職能都是比較陌生的。對網頁游戲開發也不夠了解,游戲到底是怎麼製作出來的呢?\x0d\x0a\x0d\x0a網頁游戲開發的程序構成分為三大部分:第一是數據流程。第二是美術。第三是程序。\x0d\x0a1、數據流程\x0d\x0a數據流程其中,數據流程包括了功能。也只有在功能中才能體現數據流程。\x0d\x0a比如最簡單的賣買產品。要實現這個功能,那麼需要有產品基礎表、產品詳細表、商店表、背包表。如果擴展性更強,相應的雙表是少不不了的。\x0d\x0a表的問題都簡單了,關鍵是這個物品有什麼用,這樣物品的來源,一大堆數據,物品的走向,又是一大堆數據。最後,這些數據得繞成一個圈。繞圈是一件困難的事情,特別是功能和道具多了起來的時候。難度是2的n次方。\x0d\x0a2、美術\x0d\x0aUI:簡潔漂亮的界面總會有好處。\x0d\x0a小圖標:道具,地圖,裝備,一類至少10個吧?大體上百把個是需要的。\x0d\x0a3、程序分5個部分\x0d\x0a資料庫:一大堆基礎數據表和詳細數據表。基礎數據表:比如等級1到等級100的用戶的屬性初始值。詳細數據表:每個用戶的具體屬性。\x0d\x0a功能頁面、功能函數。主要就是數據存取,判斷,數據走向。\x0d\x0aajax函數:(可選)某些需要偽即時的功能要用到。\x0d\x0ajavascript函數:(可選)模擬客戶端的數據計算。也就是webgame的與時間相關的數據。分為兩部分。一部分是真實數據,是由伺服器端的定時器計算的。另一部分是只有初始值,客戶端顯示用的。不需要即時同步,僅僅需要模擬同步就行。\x0d\x0a伺服器定時器:(C語言或自己設定伺服器)定時循環執行某一段代碼。而這段代碼主要是根據資料庫的數據進行更新。這個可以找個C語言程序員來做。對於C語言程序員來講,這個功能是相當的簡單。當然,具體的處理數據的判斷和操作資料庫,需要你自己寫。讓C語言程序員給你段標准代碼就行了。完全支持sql語句的。\x0d\x0a當然在網頁游戲開發前,還要組織相關的專業人才,製作一款網路游戲需要的最核心人才是原畫、2D、3D、程序設計、策劃等這些方面的人才是必不可少的,因此,要開發一個網頁游戲除了要程序員以外,千萬不要忘了准備以上人才。

4. 怎樣自己動手製作安卓版小游戲

  1. 用RPG MakerXP吧,那樣你只要有一些語言基礎就會製作出自己想要的游戲。

  2. 載文字游戲製作工具

  3. 點擊新建,進入游戲製作界面。

  4. 拖動左側圖片可以設置為背景圖,遠景圖,近景圖等。製作工具提供一些素材,也可以自己下載後導入。

  5. 如何製作一個屬於自己的游戲

  6. 雙擊文字框可以編輯文本,包括角色名稱對話內容等。包括頭像設置,字體顏色等。

  7. 如何製作一個屬於自己的游戲

  8. 點擊素材庫可以免費下載各種素材,包括背景圖、人物立繪、游戲音樂等。可以滿足一般游戲的製作而不需要另外下載。

  9. 如何製作一個屬於自己的游戲

  10. 下方可以設置游戲流程畫面效果等,包括劇情頁面跳轉等,具體操作多多研究就可以輕松掌握啦~

5. android 開發 本人正在做一個小游戲 如何能夠實現點擊屏幕任意位置開始

public boolean onTouch(View view, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){//之捕捉屏幕被按下的事件

詳情查閱API

6. 用android編出來的小游戲有哪些

小鳥、水果忍著什麼的就不用說了,想必你也玩爛了。
我推薦幾個我在玩的:
1、stupidzombies(幾個子彈內打死所有屏幕上的僵屍,子彈會在屏幕上彈來彈去)
2、ageofwind2(中世紀海盜游戲,出去炸翻海上的船,然後撿桶子回去賣錢,修船買新船,挺有意思,重力感應操作方向,剛開始有點不熟,熟練了可以風箏n只船)
3、whackyourboss(只有20關,中文名好像叫老闆的20種死法,如果你在工作,說不定你會喜歡)
4、三國殺。這個就不用說了吧
5、beats。跳舞機游戲。
6、battleheart(中文名勇者之心,打怪升級的,有法師、獵人、戰士、dk、野蠻人、盜賊幾種職業)
7、canknockdown(踢罐子,拿球砸罐子,有點意思)
8、where『smywater?(鱷魚愛洗澡)
9、三劍之舞(棒子的游戲,類似於地下城與勇士)
10、deathrally(死亡拉力賽,賽車咯)
11、游戲發展國(這個會玩上癮的,不過很快就通關了,通關後還是可以繼續玩)
12、streetball(街頭籃球,挺容易的,基本上隨便選一個人物都能完爆對手,我每場得分28+,蓋帽18個,兩雙啊,哈哈)
13、skaterboy(滑板游戲)
14、cheesetower(某些網站上排名靠前的游戲,玩了覺得一般般)
好了就這些,還有很多刪了都不記得了。

7. 開發了一個安卓小游戲,插入有米廣告apk,但是沒有收入

平台一般是到第2日才會統計上1日的數據的,你如果是今天測試,應該明天或後天再查看。
apk在上傳到應用市場前(即向外發布之前),注意要做好保護措施:如混淆代碼或加密或加固之類的。
如果不做好保護,發布後很容易被打包黨進行二次打包再發布,這樣勞動成果就被打包黨竊走了。

8. 易安卓可以製作安卓的小游戲嗎

可以,易安卓里也有小游戲事例可以看看在下手,我曾經用這開發過一個小游戲😊😊😊😊

9. 手機如何自己編程做游戲

如果你有興趣在android上設計一些游戲,那麼我這兒有一些對你有所幫助的東西,我是android Market上一個名為LightRacer的小賽車游戲的開發者,雖然在此之前我也曾開發過游戲,但這仍然是我的第一個android上的應用,在這個過程中我學到了很多在android上開發游戲的經驗,並且,我也很樂意將這一切與你分享。好了,讓我們開始吧,如果你之前做過游戲的開發,那麼轉移到android這樣的移動平台上並不是件難事,你要做的只是學習一下新的架構與API,如果你是一個新手,我這兒也為你准備了一個入門清單,它適用於任何類型的游戲開發,比如動作類、策略類、模擬類或者智力類。

開啟分步閱讀模式
操作方法
01
在這門課最後,你會完成一個可以運行在安卓機或者安卓平板上的游戲。你可以與你的家人朋友分享它,用你的新知識進一步改進你的游戲,或者完全自己創造一個游戲。

02
如果你有興趣在android上設計一些游戲,那麼我這兒有一些對你有所幫助的東西,我是android Market上一個名為LightRacer的小賽車游戲的開發者,雖然在此之前我也曾開發過游戲,但這仍然是我的第一個android上的應用,在這個過程中我學到了很多在android上開發游戲的經驗,並且,我也很樂意將這一切與你分享。好了,讓我們開始吧,如果你之前做過游戲的開發,那麼轉移到android這樣的移動平台上並不是件難事,你要做的只是學習一下新的架構與API,如果你是一個新手,我這兒也為你准備了一個入門清單,它適用於任何類型的游戲開發,比如動作類、策略類、模擬類或者智力類。

03
獲取SDK第一步當然是下載並安裝android的SDK[軟體開發套件],這套SDK主要包括有核心庫文件,一個模擬器,開發工具和一些示範的樣例文件。我強烈推薦你使用 Eclipse 和 android eclipse 擴展。如果你只是使用android,Eclipse IDE就已經足夠了,但如果這是你第一次開發Java應用,建議你還是下載完整的

04
學習應用架構就像迷人的內在美一樣,這是理解
android 應用架構的關鍵,如果你不學習它,你設計出來的游戲將是一種很難修復bug的產品。你需要了解應用程序、活動、Intents以及它們是如何互相聯系交互的,Google在這兒提供了良好的信息架構。真正重要的是,你要理解為什麼在你設計的游戲中需要不止一個的活動進程以及如何設計一個用戶體驗良好的游戲。這些都應當配合到應用的生命周期中。

05
學習應用的生命周期應用的生命周期是由AndroidOS操作系統進行管理的,你的活動進程都將做為系統命令進行創建,正確處理這些事件對一個應用程序來說是極為重要的,因為終端用戶不會知道什麼是正確的。最好在開始設計你的游戲之前搞明白這些,因為這有助於節省你的調試時間以及避免代價高昂的重新設計。

06
對大多數應用而言,默認設置即可開始工作,但對游戲而言,你可能需要調整單態實例的信號為打開。在默認情況下,Android會新建一個活動實例進程,因為它認為這是比較合適的,而游戲,你可能只希望有一個活動的實例進程,這有一點兒影響,它需要你了解一些系統狀態的管理,但對我來說,它解決了資源管理的問題,還是值得的。

07
主循環是否需要一個主循環是根據你寫的游戲類型而決定的,如果你寫的游戲沒有時間依賴性或者只是響應用戶的輸入而沒有其它的視覺變化,你可能並不需要一個主循環。如果你設計的是一個平面的動作游戲或者動畫游戲,計時游戲或者其實類型的自動游戲,你就應該認真考慮使用主循環。

10. 編寫安卓小游戲

在電腦上如何玩安卓手機游戲呢?由於手機的屏幕有限制,有時玩一些手機時並不過癮,今天小編就教大家在電腦上玩轉安卓手機游戲的方法,下面一起來看看吧!
很多朋友在安裝BlueStacks模擬器的過程中遇到各種問題,所以會中途放棄,今天小編就跟大家共享一份個人安裝(BlueStacks)操作步驟,希望能幫上朋友們!
註:安裝模擬器的時候電腦上裝有360安全衛士的請關掉在安裝不然會導致安裝失敗。
*Windows7系統的同學可以不用安裝WindowsInstaller4.5.rar和NetFx20SP2_x86.exe直接安裝BlueStacks模擬器。
*windows XP系統的同學如果你的電腦中裝WindowsInstaller4.5.rar和NetFx20SP2_x86.exe程序,就不要在安裝了直接安裝BlueStacks模擬器。
下面以windows XP系統為例:
【BlueStacks模擬器安裝教程】
1、安裝BlueStacks需要下載3個安裝包分別是
(1).WindowsInstaller4.5.rar下載地址: WindowsInstaller4.5.rar
(2). NetFx20SP2_x86.exe下載地址:NetFx20SP2_x86.exe
(3). BlueStacks.zip下載地址: BlueStacks.zip最新官方下載:bluestacks
2、將下載好的WindowsInstaller4.5.rar解壓出來打開。

2.1雙擊WindowsXP-KB942288-v3-x86.exe安裝,安裝完成後不要重啟電腦,接著安裝NetFx20SP2_x86.exe程序;
2.2.雙擊已下載好的NetFx20SP2_x86.exe安裝,安裝完成後重起電腦;
2.3.把已下載好的BlueStacks模擬器解壓出來,雙擊打。

2.4雙擊BlueStacks.msi安裝.

2.5.這時彈出一個警告,我可以忽略點擊OK按鈕.

2.6.點擊完成退出安裝向導.

2.7.這時電腦的上方多了一個懸浮操作欄,點擊圈中圖標進行設置語言.

2.8.點擊NEXT,

2.9.用滑鼠拖到最底部選擇中文(簡體)好了這時你的安卓模擬器就是中文版了.

3.0這里不做設置點擊返回按鈕

下面附一張小編安裝成功的截圖,用滑鼠切水果啦~~用滑鼠切水果的感覺很不一樣哦!

水果忍者(Fruit Ninja)無廣告 1.8.6.2 安卓版 評分:
5.0
類別: 休閑益智 大小:31.3M 語言: 中文
查看詳細信息 >>
下載 275 次

熱點內容
絕地求生未來之役比賽為什麼進不去 發布:2023-08-31 22:07:08 瀏覽:1369
dota2位置什麼意思 發布:2023-08-31 22:00:04 瀏覽:810
lol電競是什麼樣子 發布:2023-08-31 21:58:40 瀏覽:1267
絕地求生八倍鏡的那個圓圈怎麼弄 發布:2023-08-31 21:58:31 瀏覽:1349
lol龍龜一個多少金幣 發布:2023-08-31 21:55:07 瀏覽:719
王者如何改游戲內名稱 發布:2023-08-31 21:55:06 瀏覽:1008
游戲主播打廣告是什麼意思 發布:2023-08-31 21:55:06 瀏覽:1689
絕地求生如何免費拿到ss7賽季手冊 發布:2023-08-31 21:52:13 瀏覽:888
pgg是哪個國家的戰隊lol 發布:2023-08-31 21:52:07 瀏覽:764
一個人的時候才發現游戲很沒意思 發布:2023-08-31 21:49:24 瀏覽:1394