此博客用安卓android实现了一个简单的剪刀石头布小游戏。能完成人机对抗。
说明
这是我老师布置的一道课内作业,图片资源由老师提供,本篇博客仅展示代码部分,图片资源由于太多且没有那么必要,我就不在此展示。如需要完整代码以及图片资源,请戳此处
界面展示
主页,选择胜利需要的局数,然后进入游戏(丑莫怪)
主界面如下,当点击开始游戏后,箭头所指的红色矩形框会抖动,意思为等待选择出的内容。选择好了之后如右下图片所示,原来不停抖动的图片会替换成你选择的和电脑选择的手势,并判断胜负,更新比分。
代码部分
模型有:Player.java抽象类,HumanPlayer.java,RobotPlayer.java,Judge.java,RuleInfo.java以及两个页面:IndexActivity.java,activity_index.xml和MainActivity.java,activity_main.xml
MainActivity.java
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.game1.model.HumanPlayer;
import com.example.game1.model.Judge;
import com.example.game1.model.RobotPlayer;
import com.example.game1.model.RuleInfo;
public class MainActivity extends Activity{
public int totalGameNumber;//记录总胜利局数,从前一个界面获取
private TextView mTextViewResultShow,mTextViewBoy,mTextViewRobot,mTextViewShowNum;
private Button mButtonStartGame;
private ImageView mImageViewBoyHolder,mImageViewRobotHolder,mImageViewGetScissors,mImageViewGetRock,mImageViewGetPaper;
private RobotPlayer mRobotPlayer;//定义一个机器人
private HumanPlayer mHumanPlayer;//定义一个真人玩家
private RuleInfo mRuleInfo;//定义游戏规则,主要是记录已经开始的游戏局数
private boolean holderImgFlag = false;//控制holder图片动或是不动的标志
private int i = 10;//padding 初始值
private int[] images = {R.drawable.ps0,R.drawable.ps1,R.drawable.ps2};
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
//图片抖动效果
if (msg.what == 0x123){
mImageViewBoyHolder.setPadding(i++ %18,i++ %20,i++ %15,i++ %12);
mImageViewRobotHolder.setPadding(i++ %18,i++ %20,i++ %15,i++ %12);
}
}
};
//线程运行体
Runnable mRunnable = new Runnable() {
@Override
public void run() {
while (holderImgFlag){
//do something
try{
mHandler.sendEmptyMessage(0x123);
Thread.sleep(50);
}catch (Exception e){
e.printStackTrace();
}
}
}
};
private void init(){
mTextViewResultShow = findViewById(R.id.show_result_text);
mTextViewShowNum = findViewById(R.id.show_num_text);
mButtonStartGame = findViewById(R.id.button_game_start);
mImageViewBoyHolder = findViewById(R.id.boy_holder);
mImageViewRobotHolder = findViewById(R.id.robot_holder);
mImageViewGetScissors = findViewById(R.id.get_scissors);
mImageViewGetRock = findViewById(R.id.get_rock);
mImageViewGetPaper = findViewById(R.id.get_paper);
mTextViewBoy = findViewById(R.id.boy_text);
mTextViewRobot = findViewById(R.id.robot_text);
totalGameNumber = getIntent().getIntExtra("num",3);
newGame();
}
private void newGame(){
prohibitTorch();//禁止点击
mRobotPlayer = new RobotPlayer("Robot");
mHumanPlayer = new HumanPlayer("boy");
mRuleInfo = new RuleInfo();
//更新ui
mTextViewShowNum.setText("任意方累计获胜"+totalGameNumber+"场即获得最终胜利");
mButtonStartGame.setText("开始游戏");
mButtonStartGame.setEnabled(true);
}
//不允许点击剪刀石头布三个图片
private void prohibitTorch(){
mImageViewGetScissors.setEnabled(false);
mImageViewGetRock.setEnabled(false);
mImageViewGetPaper.setEnabled(false);
}
//允许点击剪刀石头布三个图片
private void unProhibitTorch(){
mImageViewGetScissors.setEnabled(true);
mImageViewGetRock.setEnabled(true);
mImageViewGetPaper.setEnabled(true);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
mImageViewGetScissors.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prohibitTorch();//上锁
mButtonStartGame.setText("第"+(mRuleInfo.gameNumber)+"局游戏结束");
//图片停止动
holderImgFlag = false;
//将真人玩家的value设置成剪刀
mHumanPlayer.setValue(RuleInfo.SCISSORS);
//将boy占位图片设置成剪刀
mImageViewBoyHolder.setImageResource(images[mHumanPlayer.getValue()]);
//将机器人的占位图片设置为应该的样子
mImageViewRobotHolder.setImageResource(images[mRobotPlayer.getValue()]);
doJudge();//做判断,并更新ui
mButtonStartGame.setEnabled(true);
}
});
mImageViewGetRock.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mButtonStartGame.setText("第"+(mRuleInfo.gameNumber)+"局游戏结束");
prohibitTorch();//上锁
//图片停止动
holderImgFlag = false;
//将真人玩家的value设置成石头
mHumanPlayer.setValue(RuleInfo.ROCK);
//将boy占位图片设置成石头
mImageViewBoyHolder.setImageResource(images[mHumanPlayer.getValue()]);
//将机器人的占位图片设置为应该的样子
mImageViewRobotHolder.setImageResource(images[mRobotPlayer.getValue()]);
doJudge();//做判断,并更新ui
mButtonStartGame.setEnabled(true);
}
});
mImageViewGetPaper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mButtonStartGame.setText("第"+(mRuleInfo.gameNumber)+"局游戏结束");
prohibitTorch();//上锁
//图片停止动
holderImgFlag = false;
//将真人玩家的value设置成布
mHumanPlayer.setValue(RuleInfo.PAPER);
//将boy占位图片设置成布
mImageViewBoyHolder.setImageResource(images[mHumanPlayer.getValue()]);
//将机器人的占位图片设置为应该的样子
mImageViewRobotHolder.setImageResource(images[mRobotPlayer.getValue()]);
doJudge();//做判断,并更新ui
mButtonStartGame.setEnabled(true);
}
});
mButtonStartGame.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//无伤大雅的更新ui
mTextViewResultShow.setText(getShowResult(mHumanPlayer.getGoals(),mRobotPlayer.getGoals()));
//占位图片开始动
holderImgFlag = true;
new Thread(mRunnable).start();
unProhibitTorch();//解锁
mImageViewBoyHolder.setImageResource(R.drawable.holder);
//将机器人的占位图片设置为应该的样子
mImageViewRobotHolder.setImageResource(R.drawable.holder);
//游戏局数加一
int num = mRuleInfo.addGameNumber();
mButtonStartGame.setText("第"+(num)+"局游戏开始");
//机器玩家开始玩游戏
mRobotPlayer.robotAutoPlay();
mButtonStartGame.setEnabled(false);
}
});
}
private String getShowResult(int a,int b){
return a+" : "+b;
}
private void doJudge(){
int a = Judge.judge(mHumanPlayer,mRobotPlayer);
if (a == 0){
//平手
mTextViewBoy.setText("平");
mTextViewRobot.setText("平");
}else if (a == -1){
//真人胜利
mTextViewBoy.setText("胜");
mTextViewRobot.setText("负");
}else {
mTextViewBoy.setText("负");
mTextViewRobot.setText("胜");
}
//更新ui
mTextViewResultShow.setText(getShowResult(mHumanPlayer.getGoals(),mRobotPlayer.getGoals()));
if (mRobotPlayer.goals == totalGameNumber){
Toast.makeText(MainActivity.this,"游戏结束,机器人获胜!",Toast.LENGTH_LONG).show();
newGame();
}
if (mHumanPlayer.goals == totalGameNumber) {
Toast.makeText(MainActivity.this,"游戏结束,男孩获胜!",Toast.LENGTH_LONG).show();
newGame();
}
}
public static Intent newIntent(Context context, int num){
Intent intent = new Intent(context,MainActivity.class);
intent.putExtra("num",num);
return intent;
}
}
activity_mian.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#8DD0F1F1"
>
<ImageView
android:id="@+id/logo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/logo"/>
<RelativeLayout
android:layout_below="@id/logo"
android:id="@+id/portrait"
android:layout_width="match_parent"
android:layout_height="100dp"
android:paddingTop="10dp">
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="20dp"
android:src="@drawable/boy"
android:layout_alignParentLeft="true"
/>
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/vs"
android:layout_centerHorizontal="true"/>
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginRight="20dp"
android:src="@drawable/robot"
android:layout_alignParentRight="true"/>
</RelativeLayout>
<RelativeLayout
android:layout_below="@id/portrait"
android:id="@+id/goals"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="90dp">
<TextView
android:id="@+id/show_result_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="0 : 0"
android:textSize="50dp"/>
<TextView
android:id="@+id/show_num_text"
android:layout_below="@id/show_result_text"
android:paddingTop="5dp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="累计获胜X场即获得最终胜利"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/holder"
android:layout_marginTop="5dp"
android:layout_below="@id/goals"
android:layout_width="match_parent"
android:layout_height="180dp">
<RelativeLayout
android:layout_width="180dp"
android:layout_height="180dp"
android:layout_alignParentLeft="true">
<ImageView
android:id="@+id/boy_holder"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_centerInParent="true"
android:src="@drawable/holder"/>
<TextView
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:id="@+id/boy_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="结果"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="180dp"
android:layout_height="180dp"
android:layout_alignParentRight="true">
<ImageView
android:id="@+id/robot_holder"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_centerInParent="true"
android:src="@drawable/holder"/>
<TextView
android:id="@+id/robot_text"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="结果"/>
</RelativeLayout>
</RelativeLayout>
<Button
android:id="@+id/button_game_start"
android:layout_below="@id/holder"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_margin="20dp"
android:text="开始游戏"
android:textSize="25dp"
android:background="#C6EED7"/>
<RelativeLayout
android:id="@+id/bottom"
android:layout_width="match_parent"
android:layout_height="120dp"
android:paddingTop="20dp"
android:layout_alignParentBottom="true">
<ImageView
android:id="@+id/get_scissors"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/scissors"
android:layout_alignParentLeft="true"
/>
<ImageView
android:id="@+id/get_rock"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/rock"
android:layout_centerHorizontal="true"/>
<ImageView
android:id="@+id/get_paper"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/paper"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</RelativeLayout>
IndexActivity.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class IndexActivity extends Activity {
private Button b3,b5,b7,b9,bStart;
private TextView mTextView;
private int num = 3;//默认是三
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_index);
b3 = findViewById(R.id.button3);
b5 = findViewById(R.id.button5);
b7 = findViewById(R.id.button7);
b9 = findViewById(R.id.button9);
bStart = findViewById(R.id.button_start);
mTextView = findViewById(R.id.num_text);
b3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num = 3;
mTextView.setText("最终胜局:3");
}
});
b5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num = 5;
mTextView.setText("最终胜局:5");
}
});
b7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num = 7;
mTextView.setText("最终胜局:7");
}
});
b9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num = 9;
mTextView.setText("最终胜局:9");
}
});
bStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = MainActivity.newIntent(IndexActivity.this,num);
startActivity(intent);
}
});
}
}
activity_index.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
>
<ImageView
android:id="@+id/logo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/logo"/>
<LinearLayout
android:layout_centerInParent="true"
android:layout_width="300dp"
android:layout_height="300dp"
android:orientation="vertical">
<TextView
android:id="@+id/num_text"
android:layout_width="match_parent"
android:layout_height="70dp"
android:textSize="40dp"
android:text="请选择最终胜局"
android:gravity="center"
android:background="#9A382E1A"
android:textColor="#F1F1F1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="80dp"
android:orientation="horizontal"
android:layout_margin="20dp">
<Button
android:id="@+id/button3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:text="3"
android:textSize="30dp"
android:background="#BA94DCF5"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
<Button
android:id="@+id/button5"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:text="5"
android:textSize="30dp"
android:background="#BA94DCF5"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="80dp"
android:orientation="horizontal"
android:layout_margin="20dp">
<Button
android:id="@+id/button7"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:text="7"
android:textSize="30dp"
android:background="#BA94DCF5"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
<Button
android:id="@+id/button9"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:text="9"
android:textSize="30dp"
android:background="#BA94DCF5"/>
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/button_start"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_margin="40dp"
android:text="开始游戏"
android:textSize="35dp"
android:background="#ECD41D"/>
</RelativeLayout>
Player.java
public class Player {
public String name;
public int goals;
public int value;
public Player() {
}
public Player(String name) {
this.name = name;
this.goals = 0;
this.value = 0;
}
public Player(String name, int goals, int value) {
this.name = name;
this.goals = goals;
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGoals() {
return goals;
}
public void setGoals(int goals) {
this.goals = goals;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
HumanPlayer.java
public class HumanPlayer extends Player {
public HumanPlayer() {
}
public HumanPlayer(String name) {
super(name);
}
public HumanPlayer(String name, int goals, int value) {
super(name, goals, value);
}
}
RobotPlayer.java
public class RobotPlayer extends Player {
public RobotPlayer() {
}
public RobotPlayer(String name) {
super(name);
}
public RobotPlayer(String name, int goals, int value) {
super(name, goals, value);
}
//机器人自动划拳的方法
public void robotAutoPlay(){
value = (int)(Math.random()*3);
}
}
Judge.java
public class Judge {
public static int judge(Player p1,Player p2) {
if(p1.value-p2.value==1||p1.value-p2.value==-2){
p1.goals++;
return -1;
}else if(p1.value-p2.value==-1||p1.value-p2.value==2){
p2.goals++;
return 1;
}else{
return 0;
}
}
}
RuleInfo.java
/**
* 记录游戏规则
* */
public class RuleInfo {
public final static int SCISSORS = 0;//剪刀
public final static int ROCK = 1;//石头
public final static int PAPER = 2;//布
public int gameNumber; //已经开始的局数
public int addGameNumber(){
this.gameNumber++;
return gameNumber;
}
public RuleInfo() { }
public int getGameNumber() {
return gameNumber;
}
public void setGameNumber(int gameNumber) {
this.gameNumber = gameNumber;
}
}
总结
如果上面的请戳此处没有链接,不要着急,那是因为我资源还没有通过审核,我会在资源通过审核的第一时间补充上链接。码字不易,关注不迷路
转载:https://blog.csdn.net/baidu_41860619/article/details/105184639
查看评论