Android 实现弹球游戏

一,知识点。

1,如何自定义View,以及重写它的onDraw方法.

2,Intent实现界面跳转。

3,线程的使用。

4,弹出框框的使用。

二,具体实现代码。

MainLayout文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/container"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="@drawable/bg1">
<LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:layout_marginTop="150dp"android:layout_marginLeft="50dp"><Buttonandroid:id="@+id/start_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="开始游戏" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/exit_btn"android:text="退出游戏"/></LinearLayout></LinearLayout>

MainActivity文件

package com.example.my.fivegame;import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;public class MainActivity extends AppCompatActivity implements View.OnClickListener{private Button start_btn,exit_btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);start_btn= (Button) findViewById(R.id.start_btn);exit_btn= (Button) findViewById(R.id.exit_btn);start_btn.setOnClickListener(this);exit_btn.setOnClickListener(this);}@Overrideprotected void onRestart() {super.onRestart();Toast.makeText(this, "其实你无论选择什么都会回到这个界面,想不到吧", Toast.LENGTH_LONG).show();}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.start_btn:{Intent i = new Intent();i.setClass(MainActivity.this, Main2Activity.class);this.startActivity(i);break;}case R.id.exit_btn:{System.exit(0);break;}}}
}


Main2Activity文件


package com.example.my.fivegame;import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;public class Main2Activity extends AppCompatActivity {private int tableWidth;private int tableHeight;private int racketY;private final int RACKET_HEIGHT=30;private final int RACKET_WIDTH=120;private final int BALL_SIZE=16;private int y_Speed=30;private Random rand=new Random();private double xyRate=rand.nextDouble()-0.5;private int x_Speed=(int)(y_Speed*xyRate*2);private int ballX=rand.nextInt(200)-20;private int ballY=700;private int racketX=rand.nextInt(200);public boolean isLose=false;private int nowRow=5;private int nowRol=7;private int[][] mp=new int[nowRow][nowRol];;private int blocks_Wide=RACKET_WIDTH+40;private int blocks_Height=RACKET_HEIGHT*2;private int startX_block=25;private int startY_block=100;private int[] colormp={Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW};private int IntervalX=20;private int IntervalY=30;private int scores=0;private AlertDialog.Builder builder;private List<Main2Activity.mubiao> Anim=new ArrayList<Main2Activity.mubiao>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(R.layout.activity_main2);requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);final Main2Activity.GameView gameView=new Main2Activity.GameView(this);setContentView(gameView);gameView.setBackgroundResource(R.drawable.bg4);WindowManager windowManager=getWindowManager();Display display=windowManager.getDefaultDisplay();DisplayMetrics metrics=new DisplayMetrics();display.getMetrics(metrics);tableHeight=metrics.heightPixels;tableWidth=metrics.widthPixels;racketY=tableHeight-300;builder=new AlertDialog.Builder(this);builder.setTitle("提示");builder.setMessage("是否重开一局吗?");builder.setPositiveButton("这次是意外,重开", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();Main2Activity.this.finish();}});builder.setNegativeButton("认怂,就不重开", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();Main2Activity.this.finish();}});Toast.makeText(this, racketY+"与"+tableHeight, Toast.LENGTH_SHORT).show();initmp();final Handler handler=new Handler(){@Overridepublic void handleMessage(Message msg) {if(msg.what==0x123)gameView.invalidate();}};gameView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {float x,y;switch (event.getAction()){case MotionEvent.ACTION_DOWN: {x = event.getX();y = event.getY();}case MotionEvent.ACTION_MOVE:{racketX=(int)event.getX();return true;}}return false;}});final Thread thread= new Thread(){boolean IsClick=false;@Overridepublic void run() {for(int i=0;i<Anim.size();i++){int left=Anim.get(i).left;int right=Anim.get(i).right;int top=Anim.get(i).top;int botton=Anim.get(i).botton;if(ballY-5>=top&&ballY-5<=botton&&ballX-5>=left&&ballX+5<=right){scores+=10;if (ballY - 5 >= top && ballY - 5 <= botton) {y_Speed = -y_Speed;Anim.remove(i);break;}if (ballX - 5 >= left && ballX + 5 <= right) {x_Speed = -x_Speed;Anim.remove(i);break;}}}}};final Timer timer=new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {if(ballX<=0||ballX>=tableWidth-BALL_SIZE){x_Speed=-x_Speed;}if(ballY>=racketY-BALL_SIZE&&(ballX<=racketX||ballX>racketX+RACKET_WIDTH)){timer.cancel();isLose=true;}else if(ballY<=0||(ballY>=racketY-BALL_SIZE&&ballX>racketX&&ballX<=racketX+RACKET_WIDTH)){y_Speed=-y_Speed;}ballX+=x_Speed;ballY+=y_Speed;thread.start();handler.sendEmptyMessage(0x123);if(Anim.size()==0){Toast.makeText(Main2Activity.this, "恭喜你成功吃完所有球", Toast.LENGTH_SHORT).show();Main2Activity.this.finish();}}},0,60);}void initmp(){scores=0;for(int i=0;i<nowRow;i++){for(int j=0;j<nowRol;j++){mp[i][j]=rand.nextInt(4);}}int top,botton;top=startY_block;botton=blocks_Height+startY_block;for(int i=0;i<nowRow;i++){if(i!=0) {top += blocks_Height + IntervalY;botton+=blocks_Height + IntervalY;}int left,right;left=startX_block;right=startX_block+blocks_Wide;for(int j=0;j<nowRol;j++){if(j!=0){left+=IntervalX+blocks_Wide;right+=IntervalX+blocks_Wide;}Main2Activity.mubiao one=new Main2Activity.mubiao();one.left=left;one.right=right;one.top=top;one.botton=botton;one.colorid=mp[i][j];Anim.add(one);}}}class GameView extends View{Paint paint=new Paint();public GameView(Context context) {super(context);setFocusable(true);}@Overrideprotected void onDraw(Canvas canvas) {paint.setStyle(Paint.Style.FILL);paint.setAntiAlias(true);for(int i=0;i<Anim.size();i++){int left=Anim.get(i).left;int right=Anim.get(i).right;int top=Anim.get(i).top;int botton=Anim.get(i).botton;paint.setColor(colormp[Anim.get(i).colorid]);canvas.drawRect(left,top,right,botton,paint);}if (isLose) {paint.setColor(Color.RED);paint.setTextSize(40);canvas.drawText("游戏结束,你的最终的分为:"+scores, tableWidth/2-300, tableHeight/2+tableHeight/4, paint);Toast.makeText(Main2Activity.this, "你可以按返回键重新开始游戏", Toast.LENGTH_SHORT).show();builder.create().show();}else{paint.setColor(Color.GREEN);paint.setTextSize(50);canvas.drawText("得分:"+scores, tableWidth/2-100, 50, paint);paint.setColor(Color.BLUE);canvas.drawCircle(ballX,ballY,BALL_SIZE,paint);paint.setColor(Color.BLACK);canvas.drawRect(racketX,racketY,racketX+RACKET_WIDTH,RACKET_HEIGHT+racketY,paint);}super.onDraw(canvas);}}class mubiao{public int left,right,top,botton;public boolean IsClick=false;public int colorid;}
}


实现效果:





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12902.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扫雷游戏问题

题目描述 扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。玩家翻开一个非地雷格时&#xff0c;该格将会出现一个数字——提示周围格子中…

psychoPy下载避雷

直接使用命令行&#xff1a;pip install psychopy 下载会遇到两个文件无法下载&#xff0c;需要手动到网上下载&#xff0c;至于那两个文件叫什么&#xff0c;已经不记得了。 接下来是尝试了很多种方法&#xff0c;成功安装的一个&#xff01; 进入官网 https://www.psychopy…

避雷针如何惹怒别人的?

History of the Lightning Rod: How the Lightning Rod was Invented and Terrified & Offended People闪电的驯服者&#xff1a;电学的历史 01 避雷针 一、前言 避雷针仅仅是一个通过电线连接到地下的金属棒&#xff0c;那它为何能够吓到和惹怒别人的呢&#xff1f;  在K…

如何实现精致扫雷游戏(可扩散可标记)---保姆级教程

目录 思路&#xff1a; main函数内容&#xff1a; 创建“双子”数组&#xff1a; 初始化数组&#xff1a; 打印棋盘&#xff1a; 布置雷&#xff1a; 排查雷&#xff1a; 初阶&#xff1a; 大致过程&#xff1a; 如何统计周围雷的个数&#xff1a; 判断是否赢得游戏…

【强化学习】玩转Atari-Pong游戏

如果您感觉项目还不错&#xff0c;请您点个fork支持一下&#xff0c;谢谢qwq 玩转Atari-Pong游戏 Atari: 雅达利&#xff0c;最初是一家游戏公司&#xff0c;旗下有超过200款游戏&#xff0c;不过已经破产。在强化学习中&#xff0c;Atari游戏是经典的实验环境之一&#xff0c;…

如何用计算机编辑游戏,编辑教你用iPad玩转电脑游戏之RPG篇

今天中关村游戏网要给大家带来的并不是几大又几大&#xff0c;盘点有盘点啥的。今天要给大家带来一些特别的东西&#xff1b;同学们你们一定要Hold住不要大喊大叫啊~。 iPad作为现代生活中的高科技产物已经越来越普及了&#xff0c;当然ISO的游戏也并非少数。但有了这些游戏你就…

保姆级教学—扫雷游戏的实现

扫雷的目录 扫雷游戏选择初始化棋盘布置雷打印棋盘排查雷完整代码呈现 结尾 扫雷 整个游戏的实现分为五个部分&#xff1a; 游戏选择初始化棋盘布置雷打印棋盘排查雷 在文章的最后会有完整的代码呈现 游戏选择 首先是游戏选择部分&#xff0c;你可以在此选择是否开始游戏 …

[Moonlight内网串流教程] IPAD超简易操作版 - 安卓苹果通用

超简易进行串流教程 使用设备&#xff1a;ipad Air 3 、有Nvidia显卡的普通Windows笔记本。 Windows系统准备工作 1、打开Nvidia GeForce Experience&#xff0c;如果没有就去下载一个。 2、进入C:\ProgramData\NVIDIA Corporation\Downloader\latest 3、将里面的setup.exe右…

iPad 3g版完美实现打电话功能(phoneitipad破解)

看到这个标题&#xff0c;有的同学可能吐槽&#xff0c;iPad 用来打电话&#xff0c;多雷人啊&#xff0c;人家apple设计的时候没加电话功能是故意这样做的。 不过这次真的有这样的需求&#xff0c;一台测试用的iPad 1 3G版的机器&#xff0c;放进去了一张3G电话卡&#xff0c;…

大学军训板报计算机学院,大学生军训黑板报素材

大学生军训黑板报素材 大学生军训黑板报有哪些呢&#xff1f;我们不妨一起来参考下范文吧&#xff01;希望对您有所帮助&#xff01;以下是小编为您搜集整理提供到的大学生军训黑板报素材内容&#xff0c;希望对您有所帮助&#xff01;欢迎阅读参考学习&#xff01; 大学生军训…

军训计算机电气专业解说词,你的军训有我陪伴

9月3日&#xff0c;湖南大学2018级新生军训开始了。这一天天气如以往一样&#xff0c;闷热难耐&#xff0c;但是对于电气与信息工程学院电自1801班学生助理张之亮来说却是难忘的一天。 就在中午十二点左右&#xff0c;张之亮同学接到了一个紧急电话&#xff1a;电自1801班的黄天…

计算机网络军训口号,军训口号霸气口号(精选60句)

军训口号霸气口号(精选60句) 下面是小编帮大家整理的军训口号霸气口号(精选60句)&#xff0c;供大家参考借鉴&#xff0c;希望可以帮助到有需要的朋友。 军训口号霸气口号1 1、流血流汗不流泪&#xff0c;掉皮掉肉不掉队。 2、一连口号&#xff1a;铁血一连&#xff0c;彰显军颜…

计算机系军训口号四句霸气,军训口号 四句 霸气

军训口号 四句 霸气 掉皮掉肉不掉队&#xff0c;流血流汗不流泪 继承人民军队光荣传统和优良作风为民族复兴刻苦学习 发扬集体主义和革命英雄主义精神为祖国富强立志成才 磨练顽强的斗志&#xff0c;培养吃苦的精神&#xff0c;锤炼良好的品质 服从命令听从指挥团结互助争创佳绩…

计算机学院军训口号大全团队,关于霸气押韵的军训口号大全

关于霸气押韵的军训口号大全 导语&#xff1a;《现代汉语词典》中说&#xff0c;口号是“供口头呼喊的有纲领性和鼓动作用的简短句子”。马克思主义哲学认为&#xff0c;物质决定意识&#xff0c;意识对物质具有能动作用。口号作为意识的表现形式之一&#xff0c;是对当时社会政…

计算机网络军训口号,霸气押韵的16字军训口号(精选50句)

霸气押韵的16字军训口号(精选50句) 人是靠梦想活下来的,也是靠梦想活下去的,军训是锻炼我们的.意识形态。下面和小编一起来看霸气押韵的16字军训口号(精选50句),希望有所帮助! 1、军中骄子,校园精英;铿锵四连,勇往直前。 2、天骄十六,不懈追求;勇往直前,争创一流。 3…

计算机系统军训口号,有气势的军训口号(精选50条)

有气势的军训口号(精选50条) 在日常学习、工作和生活中&#xff0c;大家都听说过或者使用过一些比较经典的口号吧&#xff0c;口号的作用是便于“造势”&#xff0c;形成一种氛围。你知道什么样的口号才能称之为经典吗&#xff1f;以下是小编帮大家整理的有气势的军训口号(精选…

计算机系军训口号四句霸气,军训口号四句霸气

军训口号四句霸气 军训口号四句霸气的有哪些?以下是小编收集的关于《军训口号四句霸气》的文章&#xff0c;欢迎借鉴参考! 篇一&#xff1a;军训口号四句霸气 风云XX&#xff0c;军中骄子&#xff0c;校园精英&#xff0c;谁与争风。 军鹰XX&#xff0c;翱翔九天&#xff0c;搏…

大学军训板报计算机学院,军训主题黑板报内容

【军训主题黑板报内容】军之魂 置身军旅&#xff0c;信念不可缺少&#xff0c;按照某种说法&#xff0c;此种信念即时人们口口相传的“军魂”——“军之魂”。 “狭路相逢勇者胜&#xff0c;遇敌必亮剑。”此堪为“军魂”之一。对于“军魂”二字&#xff0c;我想&#xff0c;若…

计算机网络军训口号,计算机专业军训口号

1. 争当训练标兵&#xff0c;共创先进连队。 2. 不经历风雨 &#xff0c;怎么见彩虹。 3. 同心同德求实创新齐育桃李芳天下&#xff0c;自律自强奋发进取共添德艺馨未来。 4. 团结一心&#xff0c;努力拼搏。 5. 明德尚行&#xff0c;矢志报国&#xff0c;磨砺青春&#xff0c;…

谷歌云| 5 个 GKE 功能可帮助您优化集群

Cloud Ace 是谷歌云全球战略合作伙伴&#xff0c;拥有 300 多名工程师&#xff0c;也是谷歌最高级别合作伙伴&#xff0c;多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商&#xff0c;我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证培训服务。 本文将讨论 GKE 中的…