Android實(shí)現(xiàn)拼圖游戲
更新時(shí)間:2022年03月24日 11:33:45 作者:hellolxb
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了Android實(shí)現(xiàn)拼圖游戲的具體代碼,供大家參考,具體內(nèi)容如下
本人是用 android studio 完成的
源碼
package packageName;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import MyImg;
public class MainActivity extends AppCompatActivity {
? ? // 顯示圖片的寬度
? ? public static final int W = 250;
? ? // 左上邊距
? ? public static final int MARGIN = 200;
? ? // 空?qǐng)D片的索引
? ? public static final int NULLINDEX = 0;
? ? private MyImg[] imgs = new MyImg[9];
? ? // 存儲(chǔ)圖片位置的地圖
? ? private int[] map = new int[9];
? ? @Override
? ? protected void onCreate(Bundle savedInstanceState) {
? ? ? ? super.onCreate(savedInstanceState);
? ? ? ? // 主布局沒設(shè)置啥東西
? ? ? ? setContentView(R.layout.activity_main);
? ? ? ? // 用于設(shè)置生成 view 對(duì)象的寬高
? ? ? ? ViewGroup.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
? ? ? ? initImg(params);
? ? ? ? randomMap();
? ? ? ? addImg(params);
? ? ? ? // 開始新游戲
? ? ? ? Button newBtn = new Button(this);
? ? ? ? newBtn.setText("新游戲");
? ? ? ? newBtn.setTextSize(16);
? ? ? ? newBtn.setX(40);
? ? ? ? // 添加控件要用的
? ? ? ? ViewGroup.LayoutParams p1= new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
? ? ? ? addContentView(newBtn, p1);
? ? ? ? newBtn.setOnClickListener(new View.OnClickListener() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onClick(View v) {
? ? ? ? ? ? ? ? newGame();
? ? ? ? ? ? }
? ? ? ? });
? ? }
?? ?// 添加圖片到布局中并設(shè)置點(diǎn)擊事件
? ? private void addImg(ViewGroup.LayoutParams params) {
? ? ? ? for (int i = 0; i < 3; i++) {
? ? ? ? ? ? for (int j = 0; j < 3; j++) {
? ? ? ? ? ? ? ? int index = i * 3 + j;
? ? ? ? ? ? ? ? // 計(jì)算x, y坐標(biāo)
? ? ? ? ? ? ? ? int x = j * W + MARGIN;
? ? ? ? ? ? ? ? int y = i * W + MARGIN;
? ? ? ? ? ? ? ? ImageView imgView = imgs[map[index]].getImg();
? ? ? ? ? ? ? ? imgView.setX(x);
? ? ? ? ? ? ? ? imgView.setY(y);
? ? ? ? ? ? ? ? addContentView(imgView, params);
? ? ? ? ? ? ? ? imgView.setOnClickListener(new View.OnClickListener() {
? ? ? ? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? ? ? public void onClick(View v) {
? ? ? ? ? ? ? ? ? ? ? ? ImageView tempImg = imgs[NULLINDEX].getImg();
? ? ? ? ? ? ? ? ? ? ? ? int x = (int) v.getX();
? ? ? ? ? ? ? ? ? ? ? ? int y = (int) v.getY();
? ? ? ? ? ? ? ? ? ? ? ? // goal image
? ? ? ? ? ? ? ? ? ? ? ? int x1 = (int) tempImg.getX();
? ? ? ? ? ? ? ? ? ? ? ? int y1 = (int) tempImg.getY();
? ? ? ? ? ? ? ? ? ? ? ? // move top
? ? ? ? ? ? ? ? ? ? ? ? if (y - y1 == W && x == x1) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? top((ImageView) v);
? ? ? ? ? ? ? ? ? ? ? ? } else if (y - y1 == -W && x == x1) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? down((ImageView) v);
? ? ? ? ? ? ? ? ? ? ? ? } else if (x - x1 == W && y == y1) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? left((ImageView) v);
? ? ? ? ? ? ? ? ? ? ? ? } else if (x - x1 == -W && y == y1) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? right((ImageView) v);
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? if (isWin()) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? Toast.makeText(MainActivity.this, "You Win!", Toast.LENGTH_SHORT).show();
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? });
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? private void newGame() {
? ? ? ? randomMap();
? ? ? ? // 設(shè)置圖片的 x, y坐標(biāo)
? ? ? ? for (int i = 0; i < 3; i++) {
? ? ? ? ? ? for (int j = 0; j < 3; j++) {
? ? ? ? ? ? ? ? int index = i * 3 + j;
? ? ? ? ? ? ? ? int x = j * W + MARGIN;
? ? ? ? ? ? ? ? int y = i * W + MARGIN;
? ? ? ? ? ? ? ? ImageView imgView = imgs[map[index]].getImg();
? ? ? ? ? ? ? ? imgView.setX(x);
? ? ? ? ? ? ? ? imgView.setY(y);
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? private void left(ImageView img) {
? ? ? ? img.setX(img.getX() - W);
? ? ? ? imgs[NULLINDEX].getImg().setX(img.getX() + W);
? ? }
? ? private void right(ImageView img) {
? ? ? ? img.setX(img.getX() + W);
? ? ? ? imgs[NULLINDEX].getImg().setX(img.getX() - W);
? ? }
? ? private void top(ImageView img) {
? ? ? ? img.setY(img.getY() - W);
? ? ? ? imgs[NULLINDEX].getImg().setY(img.getY() + W);
? ? }
? ? private void down(ImageView img) {
? ? ? ? img.setY(img.getY() + W);
? ? ? ? imgs[NULLINDEX].getImg().setY(img.getY() - W);
? ? }
? ? private boolean isWin() {
? ? ? ? // 根據(jù) x, y的坐標(biāo)算出圖片的位置,假如一一對(duì)應(yīng)的話,那么久是贏了
? ? ? ? for (int i = 0; i < 9; i++) {
? ? ? ? ? ? ImageView img = imgs[i].getImg();
? ? ? ? ? ? int x = (int) img.getX();
? ? ? ? ? ? int y = (int) img.getY();
? ? ? ? ? ? int index = (y - MARGIN) / W * 3 + (x - MARGIN) / W;
? ? ? ? ? ? // 有一個(gè)沒對(duì)上,就是沒贏
? ? ? ? ? ? if (index != imgs[i].getType()) {
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return true;
? ? }
? ? private void randomMap() {
? ? ? ? // 打亂地圖的位置
? ? ? ? int a, b;
? ? ? ? for (int i = 0; i < 50; i++) {
? ? ? ? ? ? a = (int) (Math.random() * 9);
? ? ? ? ? ? b = (int) (Math.random() * 9);
? ? ? ? ? ? int t = map[a];
? ? ? ? ? ? map[a] = map[b];
? ? ? ? ? ? map[b] = t;
? ? ? ? }
? ? }
? ? // 安排圖片數(shù)組
? ? private void initImg(ViewGroup.LayoutParams params) {
? ? ? ? int[] imgId = {R.drawable.img10, R.drawable.img2, R.drawable.img3, R.drawable.img4, R.drawable.img5,
? ? ? ? ? ? ? ? R.drawable.img6, R.drawable.img7, R.drawable.img8, R.drawable.img9};
? ? ? ? for (int i = 0; i < 3; i++) {
? ? ? ? ? ? for (int j = 0; j < 3; j++) {
? ? ? ? ? ? ? ? int index = i * 3 + j;
? ? ? ? ? ? ? ? imgs[index] = new MyImg(index);
? ? ? ? ? ? ? ? MyImg img = imgs[index];
? ? ? ? ? ? ? ? ImageView image = new ImageView(this);
? ? ? ? ? ? ? ? params.width = W;
? ? ? ? ? ? ? ? params.height = W;
? ? ? ? ? ? ? ? image.setLayoutParams(params);
? ? ? ? ? ? ? ? image.setImageResource(imgId[index]);
? ? ? ? ? ? ? ? img.setImg(image);
? ? ? ? ? ? ? ? // 讓地圖初始化
? ? ? ? ? ? ? ? map[index] = index;
? ? ? ? ? ? }
? ? ? ? }
? ? }
}MyImg類
package packageName;
import android.widget.ImageView;
public class MyImg {
?? ?// 用于存儲(chǔ)圖片位置的索引
? ? private int type;
? ? private ImageView img;
? ? public MyImg(int type) {
? ? ? ? this.type = type;
? ? }
? ? public void setImg(ImageView img) {
? ? ? ? this.img = img;
? ? }
? ? public ImageView getImg() {
? ? ? ? return img;
? ? }
?? ?// 獲取圖片索引
? ? public int getType() {
? ? ? ? return type;
? ? }
}以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Java實(shí)現(xiàn)Android拼圖游戲設(shè)計(jì)過程解析
- Android Studio做超好玩的拼圖游戲 附送詳細(xì)注釋源碼
- Android自定義View實(shí)現(xiàn)拼圖小游戲
- Android實(shí)現(xiàn)九宮格拼圖游戲
- Android實(shí)現(xiàn)拼圖小游戲
- 基于Android平臺(tái)實(shí)現(xiàn)拼圖小游戲
- Android利用ViewDragHelper輕松實(shí)現(xiàn)拼圖游戲的示例
- Android拼圖游戲 玩轉(zhuǎn)從基礎(chǔ)到應(yīng)用手勢(shì)變化
- Android實(shí)現(xiàn)美女拼圖游戲詳解
- android實(shí)現(xiàn)簡(jiǎn)單拼圖游戲
相關(guān)文章
Android實(shí)現(xiàn)界面的自動(dòng)跳轉(zhuǎn)功能
界面自動(dòng)跳轉(zhuǎn)是指在應(yīng)用啟動(dòng)或某個(gè)特定界面顯示后,經(jīng)過預(yù)定的時(shí)間或者滿足某些條件后,自動(dòng)跳轉(zhuǎn)到另一個(gè)目標(biāo)界面,本文小編給大家講解了Android實(shí)現(xiàn)界面的自動(dòng)跳轉(zhuǎn)功能,感興趣的小伙伴跟著小編一起來看看吧2025-04-04
刷新Activity中的scrollview示例(局部ui刷新)
代碼很簡(jiǎn)單,但是很實(shí)用,適合在一個(gè)Activity中要刷新局部的UI,比如在掃描一維碼的時(shí)候,要把每次掃描的結(jié)果都顯示在界面上2014-01-01
Android studio gradle環(huán)境變量配置教程
這篇文章主要為大家詳細(xì)介紹了Android studio gradle環(huán)境變量配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android 中 GridView嵌套在ScrollView里只有一行的解決方法
本文給大家?guī)韮煞N有關(guān)Android 中 GridView嵌套在ScrollView里只有一行的解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-10-10
Android獲取當(dāng)前運(yùn)行的類名或者方法
這篇文章主要介紹了Android獲取當(dāng)前運(yùn)行的類名或者方法,涉及Android操作類與方法的技巧,需要的朋友可以參考下2015-05-05

