20172321 20172333 2017-2018 暑假作业APP

项目介绍

项目成员

  • 吴恒佚 20172321
  • 严域俊 20172333

项目简介

  • 从理论上来说,这是一个贪吃蛇游戏。
  • 《贪吃蛇》:控制小蛇前进的方向,尽可能吃更多的东西使自己变长,首先不能咬到自己的尾巴,不能撞到墙壁。————360百科
  • 本游戏玩法:用按钮上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,而且蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,不能咬到自己的身体,更不能咬自己的尾巴(目前只支持无限模式,后期应该会有闯关等新模式)

代码地址

提取码:cnq6

项目展示

运行展示

分区展示

  • 首先介绍的是app图标

这是导入自己喜欢的图片后,在以下代码中修改自己喜欢的名字和图片地址

  • 之后进入这个页面,这是个菜单页面,理论上来说,可以选择要玩的游戏和查看攻略以及历史评分之类的,不过现在还没有完成这些功能

  • 最后就是游戏界面,目前是简朴复古流

    游戏画面清晰易懂、操作按钮简单朴实、没有花里胡哨的闯关地图,在小小的方形地图中挑战极限 ...可计分、暂停、加速。

制作过程

开始操作之前

  • 在严域俊小胖友的诚挚邀请下我来到了他的家,两个热爱编程的人在一起能干什么呢?还能干什么呢?

    • 暑假编程不还没写吗?王老师不是说可以编个小游戏吗?
    • 要不来个俄罗斯方块,感觉没什么难度。。。
    • 去贴吧里看看编程思路好了
    • 算了算了,有没有什么简单点的。。。
  • 之后我们一起参观了B站老哥的教学视频,主要是学习蛇体的运动方式,和食物是否被吃的判定。

关键代码解析

  • 最开始肯定是生成一个30*30的背景墙并且设置墙壁
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
width = getWidth();
height = getHeight();
pixl = width / SnakeConfig.snakeNum;
if (!isInit) {
initPoint();
isInit = true;
}
mPaint.setStrokeWidth(pixl * 2);
snakePaint.setStrokeWidth(pixl - 2);
initWall(canvas);
initSnake(canvas);
drawSnakeBuf(canvas);
}
private void initWall(Canvas canvas) {
RectF rel;
paintWall.setStyle(Paint.Style.FILL_AND_STROKE);
paintWall.setColor(Color.BLACK);
for (int i = bengin; i < width - pixl; i += pixl) {
for (int j = bengin; j < width - pixl; j += pixl) {
if (i == bengin || j == bengin || i > width - 2 * pixl || j > width - 2 * pixl) {
rel = new RectF(i, j, i + pixl, j + pixl);
canvas.drawRoundRect(rel, 10, 10, paintWall);
}
}
}
paintWall.setStyle(Paint.Style.STROKE);
paintWall.setColor(Color.LTGRAY);
for (int i = bengin; i < width - pixl; i += pixl) {
for (int j = bengin; j < width - pixl; j += pixl) {
if (i == bengin || j == bengin || i > width - 2 * pixl || j > width - 2 * pixl) {
} else {
rel = new RectF(i, j, i + pixl, j + pixl);
canvas.drawRoundRect(rel, 4, 4, paintWall);
}
}
}
}
  • 蛇体的移动是通过在移动方向的前一个格子生成蛇体并且消除蛇尾的最后一个格子的蛇体实现,例如向右移动
private void moveToRight() {
int len = snakeDatas.size();
for (int i = len - 1; i > 0; i--) {
snakeDatas.get(i).x = snakeDatas.get(i - 1).x;
snakeDatas.get(i).y = snakeDatas.get(i - 1).y;
}
snakeDatas.get(0).x = snakeDatas.get(0).x + pixl;
}
  • 还有一个关键的判定:判断两个点是否在同一个位置。用来判断蛇头和其他点的位置

    • 如果蛇头的和蛇体或者墙壁重合则死亡
    • 如果蛇头和食物重合则增加一分并且随机再生成一个代表食物的点
public boolean isSamePoint(Snake snake, Snake snakeBuf2) {
if ((snake.x - snakeBuf2.x) < -2 || (snake.x - snakeBuf2.x) > 2) {
return false;
}
if ((snake.y - snakeBuf2.y) < -2 || (snake.y - snakeBuf2.y) > 2) {
return false;
}
return true;
}

按钮生成

  • 以向上按钮为例
  • 首先我们找到一个差不多看起来像方向指针的图片

  • 然后用一个up.xml把图片引用,就得到了一个按钮。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/up_p" android:state_pressed="true"></item>
<item android:drawable="@drawable/up_n"></item> </selector>

  • 王老师指出,这样就不能用电脑键盘操作了,不过我们本来就是手机app嘛,[摊手]

可扩展功能

  • 就是一些花里胡哨的的贪吃蛇版本嘛

    • 闯关冒险、限时得分、娱乐道具
    • 网上计分、匹配对战、排名挑战
    • 会员开通、充值酷炫皮肤、购买复活加分道具
    • 3D模式(如果技术允许)
  • 您的充值,是我们前进的动力

游戏中所阐述的哲理

  • 在这个游戏中,两位创作人并不只是想向人们展示一个简朴的贪吃蛇游戏,而是想借此为人们生动的阐述一些哲理,谨在此例举两例

    • 在控制小蛇不断吞食小豆的路上,偶尔小豆不会自动生成,需要自己动手点击一下启动键。我们想告诉大家的是:取得成果的机会不总是努力寻找就可以得到的,偶尔也要自己去创造。
    • 当一局游戏失败之后开始新的一局,分数会从0开始,但是在结束后一局游戏时,你会发现,总分会是两局得分之和。大家应该明白:在前进的路上总会有许许多多的失败,偶尔要重写开始,但是,你以前的付出绝对不是毫无意义的,它也是你所取得的成绩的重要部分。

写在最后

“程序员的宿命啊,就是被扔,这代码啊,是写了扔,扔了写。”

  • 在和吴恒佚(金银铜铁刚)编写这个贪吃蛇的过程中,从无到有,这之间不过十天左右的时间,代码很简陋,从构思做什么app再到基本的框架构建,上下左右,加速,暂停,吃豆豆这些方法的实现,具现在AS上也不过600行代码,大部分知识都是从别人视频里面学的,有些时候从这位大佬上学点从帧数调整上使贪吃蛇加速,有时从另外一位大佬上学学限制贪吃蛇框架构建。整个APP都是东拼西凑出来的东西,有时候几十行代码写了出来,发现不适合,没办法只能扔掉,扔掉又重新写,写出来再扔掉,往复直到将就适合。有的BUG都完全没办法解决(技术不到位,莫得办法),只能一步一步推倒回去,直到不再出错,再重新找到其他方法重新开始。如果说其他职业的每一步工作都有自己应有的价值,再怎么废弃也是一定价值的,那么程序员就是一个极端,出BUG删掉重写、程序写完后闪退重写、方法由于类型值不符合重写、就一直扔一直写,写到那唯一的一条路上successful。得亏编写的过程中也不只有BUG,也有欢乐与成就。两个人共用一个电脑桌,桌上摆着两杯奶茶,码累了,往落地窗外看看成都的风景,过去的行人,在篮球场挥霍汗水的男女生,伸个懒腰,继续开始一次又一次的调试与视频学习。在这样没有deadline的日子悠闲的编程也算是一次另类的暑假娱乐了吧。

——强调了自己姓名的严域俊先生

参考文献

20172321 20172333 2017-2018 暑假作业APP的更多相关文章

  1. 暑假作业app博客

    一.光照传感器 界面 简介 运用了传感器类,通过手机的感应区根据当时的光照强度显示出数据. 核心代码 protected void onCreate(Bundle savedInstanceState ...

  2. 20172328 暑假作业 之 实现安卓小程序Enjoy-all

    20172328 暑假作业 之 实现安卓小程序Enjoy-all 项目介绍 项目名称: Enjoy - all 项目简介: 本项目基于Java语言和Anroid Studio软件,实现了简单的冒泡.屏 ...

  3. 20172305 暑假作业 之 TimeCalculate & Save Iron Man

    20172305 暑假作业 之 TimeCalculate & Save Iron Man TimeCalculate 项目介绍 项目名称: TimeCalculate 项目简介: 本项目基于 ...

  4. 2017国家集训队作业[arc082d]Sandglass

    2017国家集训队作业[arc082d]Sandglass 题意: ​ 有一个沙漏,初始时\(A\)瓶在上方,两个瓶子的最大容量都为\(X\)克,沙子流动的速度为\(1g\)每单位时间.给出\(K\) ...

  5. 2017国家集训队作业[arc076d/f][Exhausted?]

    2017国家集训队作业[arc076d/f][Exhausted?] 题意: ​ 有\(N\)个人,\(M\)把椅子,给出\(...L_i.R_i\)表示第\(i\)个人可以选择编号为\(1\sim ...

  6. MyEclips 2017/2018 (mac 版)安装与破解

    MyEclips 2017/2018 (mac 版)安装与破解 现在在学J2EE,然后使用的工具就是 MyEclipse,现在就抛弃 Eclipse 了,我就不多说它俩的区别了,但是 MyEclips ...

  7. MyEclipse 2017/2018 安装与破解 图文教程

    SSM 框架-02-MyEclipse 2017/2018 安装与破解 现在在学J2EE,然后使用的工具就是 MyEclipse,现在就抛弃 Eclipse 了,我就不多说它俩的区别了,但是 MyEc ...

  8. </2017><2018>

    >>> Blog 随笔原始文档及源代码 -> github: https://github.com/StackLike/Python_Note >>> 统计信 ...

  9. 2017国家集训队作业Atcoder题目试做

    2017国家集训队作业Atcoder题目试做 虽然远没有达到这个水平,但是据说Atcoder思维难度大,代码难度小,适合我这种不会打字的选手,所以试着做一做 不知道能做几题啊 在完全自己做出来的题前面 ...

随机推荐

  1. NRF52832 能烧写代码 但是不运行 ,是因为没有烧写协议栈

    仿真进入的状态 , MOVES R0.R0 请烧写  协议栈 ,自行百度!

  2. 差异是关键,TI首款隔离式CAN收发器评析

    差异是关键,TI首款隔离式CAN收发器评析           “无论是在日常生活还是媒体报道中, CAN接口对大家来说已经司空见惯了,然而将CAN接口和隔离功能整合在同一产品里,这还是业界头一遭,” ...

  3. jquery 中的dom操作

    jquery DOM 分为元素操作.属性操作.样式操作. 一.元素操作 1.查找 ①工具:jQuery选择器 2.创建和添加 ①代码格式:变量 = $('要创建的元素'): 注意点: 1 要使用标准的 ...

  4. jQuery 插件运用

    1. fullpage 插件(全屏) 官网:http://www.jq22.com/ jqueryui 官网:http://jqueryui.com/draggable/ 1.1 使用方法 引入文件 ...

  5. 【OS X系统】Xcode中搭建Python环境。

    虽然按照网上教程一步一步来,但还是遇到了几个错误点,现整理出来,主要是自己做个笔记,同时也希望能帮助到其他像我一样第一次在Xcode上搭建Python环境的人.首先感谢原作者:https://zhid ...

  6. 复制文件到IDE等工具出现乱码解决方案

    首要的解决方案是设置文件或者项目或者工作空间的编码,可以采用在文件上.项目上右键->properties进行设置 第二种方式是在editplus等编辑器里打开文件,然后打开文件之后点击菜单Fil ...

  7. WPF : ListBox的几种Template属性

    原文:WPF : ListBox的几种Template属性 属性名 属性的类名 功能 示例 Template ControlTemplate 定义控件自身的外观.其子元素的布局可以自定义,也可以由It ...

  8. 双系统IOS\windows7 换成Windows10后果

    昨天将双系统IOS 和Windows7 换成了Windows10后 发现原来在IOS盘"E"盘下面的文件都不显示了,而且盘符都打不开,那叫一个着急啊,开发项目的代码全在那个盘符里面 ...

  9. 实现对象属性的lazy-loading(延迟加载)

    一.延迟加载器LazyLoader作用:       说到延迟加载,应该经常接触到,尤其是使用Hibernate的时候,本篇将通过一个实例分析延迟加载的实现方式.LazyLoader接口继承了Call ...

  10. Codeforces 374 C. Travelling Salesman and Special Numbers (dfs、记忆化搜索)

    题目链接:Travelling Salesman and Special Numbers 题意: 给了一个n×m的图,图里面有'N','I','M','A'四种字符.问图中能构成NIMA这种序列最大个 ...