スポンサーサイト

カテゴリー: スポンサー広告

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--/--/--(--) --:-- | トラックバック(-) | コメント(-)

神経衰弱作ってみました

カテゴリー: Android

神経衰弱作ってみました。
といっても対戦相手もいないし、クリア時のランキング登録機能も用意してない(それ以前にクリアしても何もない)本当に簡易的な神経衰弱です。

使用する画像は「reverse.png」と「t1.png」~「t13.png」の14枚です。
reverse.png

t1.png

画像のzipファイルはこちらです

実行画面
trump.jpg

Trump.java

import android.app.Activity;
import android.os.Bundle;

public class Trump extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new TrumpView(this));
}
}



TrumpView.java

import java.util.Random;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class TrumpView extends SurfaceView
implements SurfaceHolder.Callback,Runnable {

SurfaceHolder holder;
Thread thread;
Card[] card = new Card[52];
int preClick = -1;

public TrumpView(Context context) {
super(context);
Resources r = context.getResources();
int[] num = new int[52];

for(int i = 0;i < 52;i++){
num[i] = i % 13 + 1;
}
num = shuffle(num);

int x = 0;
int y = 0;
//カード格納ループ
for(int i = 0;i < 52;i++){
switch(num[i]){
case 1:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t1),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
case 2:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t2),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
case 3:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t3),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
case 4:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t4),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
case 5:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t5),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
case 6:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t6),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
case 7:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t7),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
case 8:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t8),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
case 9:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t9),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
case 10:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t10),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
case 11:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t11),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
case 12:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t12),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
case 13:
card[i] = new Card(
BitmapFactory.decodeResource(r, R.drawable.t13),
BitmapFactory.decodeResource(r, R.drawable.reverse),num[i],x,y);
break;
default:
break;
}
x = card[i].getEndX();
if((i + 1) % 8 == 0){
x = 0;
y = card[i].getEndY();
}
}

holder = getHolder();
holder.addCallback(this);
holder.setFixedSize(getWidth(), getHeight());
}

@Override
public boolean onTouchEvent(MotionEvent motion){
if(motion.getAction() != MotionEvent.ACTION_DOWN){return true;}
int x = (int)motion.getX();
int y = (int)motion.getY();

for(int i = 0;i < card.length;i++){
//タッチされた場所に画像が存在していた場合
if(card[i].getStartX() <= x && card[i].getEndX() >= x &&
card[i].getStartY() <= y && card[i].getEndY() >= y){
//カードが開いていなかった場合
if(!card[i].isClick()){
card[i].onClick();
//カードを2枚開いていない場合
if(preClick == -1){
preClick = i;
}else if(preClick != i){
try{
Thread.sleep(1000);
}catch(Exception e){}

//開いた2枚のカードの値が一致しなかった場合
if(card[i].getNumber() != card[preClick].getNumber()){
card[i].onClick();
card[preClick].onClick();
}
preClick = -1;
}
}
break;
}
}
return true;
}

public int[] shuffle(int[] num){
Random rand = new Random();
int rnum;
int temp;
for(int i = 52 - 1;i > 0;i--){
rnum = rand.nextInt(i);
temp = num[i];
num[i] = num[rnum];
num[rnum] = temp;
}
return num;
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}

@Override
public void surfaceCreated(SurfaceHolder holder) {
thread = new Thread(this);
thread.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
thread = null;
}

@Override
public void run() {
Canvas canvas;

while(thread != null){
canvas = holder.lockCanvas();
for(Card c : card){
canvas.drawBitmap(c.getImage(),c.getStartX(),c.getStartY(),null);
}
holder.unlockCanvasAndPost(canvas);
}
}
}



Card.java


import android.graphics.Bitmap;

public class Card {
private final Bitmap frontCard;
private final Bitmap reverseCard;
private final int number;

private int x;
private int y;
private boolean flag;

public Card(Bitmap frontCard,Bitmap reverseCard,int number){
this.frontCard = frontCard;
this.reverseCard = reverseCard;
this.number = number;
}

public Card(Bitmap frontCard,Bitmap reverseCard,int number,int x,int y){
this.frontCard = frontCard;
this.reverseCard = reverseCard;
this.number = number;
this.x = x;
this.y = y;
}

public void setStartX(int x){
this.x = x;
}

public void setStartY(int y){
this.y = y;
}

public int getStartX(){
return x;
}

public int getStartY(){
return y;
}

public int getEndX(){
return x + frontCard.getWidth();
}

public int getEndY(){
return y + frontCard.getHeight();
}

public Bitmap getImage(){
if(flag) return frontCard;
else return reverseCard;
}
public int getNumber(){
return number;
}

public void onClick(){
flag = !flag;
}

public boolean isClick(){
return flag;
}
}




今回描画にSurfaceViewクラスを用いました。
SurfaceHolder.Callbackを実装すると
・surfaceChanged()メソッド
・surfaceCreated()メソッド
・surfaceDestroyed()メソッド
・run()メソッド
を実装しなければいけません。

またsurfaceCreated()メソッドを呼ぶときは

SurfaceHolder holder;

holder = getHolder();
holder.addCallback(this);
holder.setFixedSize(getWidth(), getHeight());


と書く事でsurfaceCreated()メソッドが実行されます。

SurfaceView使うとすげー重くなるから、実際はスレッドをもっと制御
してあげたほうがいいんだろうな
2009/11/14(土) 10:55 | trackback(1) | comment(2)
前ページ | | 次ページ

-

| [ 編集 ] 2012/12/04(火) 16:14:20

このコメントは管理者の承認待ちです

-

| [ 編集 ] 2014/12/12(金) 10:56:46

このコメントは管理者の承認待ちです











管理者にだけ表示を許可する
http://hoge1231.blog67.fc2.com/tb.php/19-0781bc3e
神経衰弱改修その1
今日からまた更新頑張って行きたいと思います 取り合えず家帰りつくが0時以内だったら更新出来るようにしたいな… 今回は以前作った神経衰...
2010/01/20(水) 23:07:34 | 暇人プログラマの日記
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。