치춘짱베리굿나이스
191211 안드로이드 슈팅게임 (최종과제) 본문
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.a1126; | |
import androidx.appcompat.app.AppCompatActivity; | |
import android.content.Context; | |
import android.content.Intent; | |
import android.content.res.Resources; | |
import android.graphics.Bitmap; | |
import android.graphics.BitmapFactory; | |
import android.graphics.Canvas; | |
import android.graphics.Color; | |
import android.graphics.Paint; | |
import android.graphics.Point; | |
import android.graphics.Typeface; | |
import android.media.AudioManager; | |
import android.media.MediaPlayer; | |
import android.media.SoundPool; | |
import android.os.Bundle; | |
import android.os.Handler; | |
import android.os.Message; | |
import android.os.Vibrator; | |
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 java.util.ArrayList; | |
import java.util.Random; | |
public class GameActivity_ extends AppCompatActivity { | |
public MyView vw; | |
public MoveFunctions movefunc; | |
static SoundPool sdPool; | |
static int shoot, MyExpl, EnemExpl, MyHeal; | |
Bitmap background, MyPlane, MyMissile, MyHP, BossMissile, item1, item2, MyMissPwUp; | |
Bitmap me1, me2, enem1_1, enem1_2, enem2_1, enem2_2, enem3_1, enem3_2, enemmiss1, enemmiss2, enemmiss3; | |
Bitmap Boss1_1, Boss1_2, Boss1_3, Boss1_4, Boss1_5, Boss2_1, Boss2_2, Boss2_3, Boss2_4, Boss2_5, Boss1_6, Boss2_6; | |
Bitmap HP120, HP110, HP100, HP90, HP80, HP70, HP60, HP50, HP40, HP30, HP20, HP10, HP0; | |
ArrayList<MyMiss> MyMiss = new ArrayList<MyMiss>(); | |
ArrayList<EnemyPlane> EnemyPl = new ArrayList<EnemyPlane>(); | |
ArrayList<BossPlane> BossPl = new ArrayList<BossPlane>(); | |
ArrayList<EnemMiss> EnemMiss = new ArrayList<EnemMiss>(); | |
ArrayList<BossMiss> BossMiss = new ArrayList<BossMiss>(); | |
ArrayList<item> Item = new ArrayList<item>(); | |
float BGY = -400; | |
float myX, myY; | |
int count = 0; | |
int Enemycount = 0, spriteflag2 = 0, spriteflag3 = 0, spriteflag4 = 0, boss_dead = 0; | |
int score = 0; | |
int stage = 1; | |
int damageup = 1; | |
int damagecnt = 0; | |
int deathflag = 0; | |
double HP = 1000; | |
Handler myMissHandler; | |
Intent inIntent = getIntent(); | |
int width; | |
int height; | |
int DPI; | |
int px_w; | |
static Vibrator vibe; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
requestWindowFeature(Window.FEATURE_NO_TITLE); | |
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); | |
DisplayMetrics metrics = new DisplayMetrics(); | |
getWindowManager().getDefaultDisplay().getMetrics(metrics); | |
DPI = metrics.densityDpi; | |
px_w = DPI / 160; | |
Display display = getWindowManager().getDefaultDisplay(); | |
Point size = new Point(); | |
display.getSize(size); | |
width = size.x; | |
height = size.y; | |
vibe = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE); | |
Missilegame(); | |
} | |
@Override | |
public void onBackPressed() { | |
//super.onBackPressed(); | |
} | |
public void Missilegame(){ | |
vw = new MyView(this); | |
movefunc = new MoveFunctions(); | |
setContentView(vw); | |
Resources res = getResources(); | |
sdPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0); | |
shoot = sdPool.load(this, R.raw.pop, 1); | |
EnemExpl = sdPool.load(this, R.raw.expl, 1); | |
MyExpl = sdPool.load(this, R.raw.expl, 1); | |
MyHeal = sdPool.load(this, R.raw.heal, 1); | |
item1 = BitmapFactory.decodeResource(res, R.drawable.hw_buffitem); | |
item2 = BitmapFactory.decodeResource(res, R.drawable.hw_debuffitem); | |
me1 = BitmapFactory.decodeResource(res, R.drawable.hw_me1); | |
me2 = BitmapFactory.decodeResource(res, R.drawable.hw_me2); | |
enem1_1 = BitmapFactory.decodeResource(res, R.drawable.hw_enem1_1); | |
enem1_2 = BitmapFactory.decodeResource(res, R.drawable.hw_enem1_2); | |
enem2_1 = BitmapFactory.decodeResource(res, R.drawable.hw_enem2_1); | |
enem2_2 = BitmapFactory.decodeResource(res, R.drawable.hw_enem2_2); | |
enem3_1 = BitmapFactory.decodeResource(res, R.drawable.hw_enem3_1); | |
enem3_2 = BitmapFactory.decodeResource(res, R.drawable.hw_enem3_2); | |
Boss1_1 = BitmapFactory.decodeResource(res, R.drawable.hw_boss1_1); | |
Boss1_2 = BitmapFactory.decodeResource(res, R.drawable.hw_boss1_2); | |
Boss1_3 = BitmapFactory.decodeResource(res, R.drawable.hw_boss1_3); | |
Boss1_4 = BitmapFactory.decodeResource(res, R.drawable.hw_boss1_defeat1); | |
Boss1_5 = BitmapFactory.decodeResource(res, R.drawable.hw_boss1_defeat2); | |
Boss1_6 = BitmapFactory.decodeResource(res, R.drawable.hw_boss1_shoot); | |
Boss2_1 = BitmapFactory.decodeResource(res, R.drawable.hw_boss2_1); | |
Boss2_2 = BitmapFactory.decodeResource(res, R.drawable.hw_boss2_2); | |
Boss2_3 = BitmapFactory.decodeResource(res, R.drawable.hw_boss2_3); | |
Boss2_4 = BitmapFactory.decodeResource(res, R.drawable.hw_boss2_defeat1); | |
Boss2_5 = BitmapFactory.decodeResource(res, R.drawable.hw_boss2_defeat2); | |
Boss2_6 = BitmapFactory.decodeResource(res, R.drawable.hw_boss2_shoot); | |
background = BitmapFactory.decodeResource(res, R.drawable.hw_bg); | |
MyMissile = BitmapFactory.decodeResource(res, R.drawable.hw_mymiss); | |
MyMissPwUp = BitmapFactory.decodeResource(res, R.drawable.hw_mymisspwup); | |
BossMissile = BitmapFactory.decodeResource(res, R.drawable.bullet12x48); | |
enemmiss1 = BitmapFactory.decodeResource(res, R.drawable.hw_enem1_miss); | |
enemmiss2 = BitmapFactory.decodeResource(res, R.drawable.hw_enem2_miss); | |
enemmiss3 = BitmapFactory.decodeResource(res, R.drawable.hw_enem3_miss); | |
HP120 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_120); | |
HP110 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_110); | |
HP100 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_100); | |
HP90 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_90); | |
HP80 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_80); | |
HP70 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_70); | |
HP60 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_60); | |
HP50 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_50); | |
HP40 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_40); | |
HP30 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_30); | |
HP20 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_20); | |
HP10 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_10); | |
HP0 = BitmapFactory.decodeResource(res, R.drawable.hw_hp_0); | |
MyHP = HP120; | |
EnemyPl.add(new EnemyPlane()); | |
HP += 100; | |
myMissHandler = new Handler() { | |
public void handleMessage(Message msg) { | |
if(msg.what == 0){ //MISSILE MOVE\ | |
BGY += (2*stage); | |
Enemycount++; | |
if(BGY >= 800 * px_w){ | |
BGY = 0; | |
} // 배경 | |
if(Enemycount % 15 == 14){ | |
if(spriteflag2 == 0){ | |
spriteflag2 = 1; | |
} | |
else if(spriteflag2 == 1){ | |
spriteflag2 = 0; | |
} | |
if(spriteflag3 == 0){ | |
spriteflag3 = 1; | |
} | |
else if(spriteflag3 == 1){ | |
spriteflag3 = 2; | |
} | |
else if(spriteflag3 == 2){ | |
spriteflag3 = 3; | |
} | |
else if(spriteflag3 == 3){ | |
spriteflag3 = 0; | |
} | |
if(spriteflag4 == 0 && boss_dead == 1){ | |
spriteflag4 = 1; | |
} | |
else if(spriteflag4 == 1 && boss_dead == 1){ | |
spriteflag4 = 2; | |
} | |
else if(spriteflag4 == 2 && boss_dead == 1){ | |
spriteflag4 = 3; | |
} | |
} | |
movefunc.SpriteMove(); | |
movefunc.EnemyAdd(); | |
movefunc.EnemyKill(); | |
movefunc.PlayerKill(); | |
movefunc.ShootMiss(); | |
movefunc.EnemyMove(); | |
movefunc.EnemyMiss(); | |
movefunc.BossAdd(); | |
movefunc.BossHP(); | |
movefunc.BossMiss(); | |
movefunc.ItemMove(); | |
vw.invalidate(); | |
if(deathflag == 0) { | |
myMissHandler.sendEmptyMessageDelayed(0, 10); | |
} | |
} | |
} | |
}; | |
myMissHandler.sendEmptyMessage(0); | |
} | |
public class MoveFunctions{ | |
//스프라이트 움직이기 | |
public void SpriteMove() { | |
Resources res = getResources(); | |
switch (spriteflag2) { | |
case 0: | |
MyPlane = me1; | |
if (EnemyPl.size() != 0) { | |
for (int k = 0; k < EnemyPl.size(); k++) { | |
switch (EnemyPl.get(k).sprite) { | |
case 1: | |
EnemyPl.get(k).Image = enem1_1; | |
break; | |
case 2: | |
EnemyPl.get(k).Image = enem2_1; | |
break; | |
case 3: | |
EnemyPl.get(k).Image = enem3_1; | |
break; | |
} | |
} | |
} | |
break; | |
case 1: | |
MyPlane = me2; | |
if (EnemyPl.size() != 0) { | |
for (int k = 0; k < EnemyPl.size(); k++) { | |
switch (EnemyPl.get(k).sprite) { | |
case 1: | |
EnemyPl.get(k).Image = enem1_2; | |
break; | |
case 2: | |
EnemyPl.get(k).Image = enem2_2; | |
break; | |
case 3: | |
EnemyPl.get(k).Image = enem3_2; | |
break; | |
} | |
} | |
} | |
} | |
if(boss_dead == 0 && BossPl.size() != 0){ | |
if((BossPl.get(0).HP / (stage * 1000) * 100 <= 100) && (BossPl.get(0).HP / (stage * 1000) * 100 > 92)){ | |
BossPl.get(0).HPImage = HP120; | |
} | |
else if((BossPl.get(0).HP / (stage * 1000) * 100 <= 92) && (BossPl.get(0).HP / (stage * 1000) * 100 > 84)){ | |
BossPl.get(0).HPImage = HP110; | |
} | |
else if((BossPl.get(0).HP / (stage * 1000) * 100 <= 84) && (BossPl.get(0).HP / (stage * 1000) * 100 > 73)){ | |
BossPl.get(0).HPImage = HP90; | |
} | |
else if((BossPl.get(0).HP / (stage * 1000) * 100 <= 73) && (BossPl.get(0).HP / (stage * 1000) * 100 > 65)){ | |
BossPl.get(0).HPImage = HP80; | |
} | |
else if((BossPl.get(0).HP / (stage * 1000) * 100 <= 65) && (BossPl.get(0).HP / (stage * 1000) * 100 > 57)){ | |
BossPl.get(0).HPImage = HP70; | |
} | |
else if((BossPl.get(0).HP / (stage * 1000) * 100 <= 57) && (BossPl.get(0).HP / (stage * 1000) * 100 > 49)){ | |
BossPl.get(0).HPImage = HP60; | |
} | |
else if((BossPl.get(0).HP / (stage * 1000) * 100 <= 49) && (BossPl.get(0).HP / (stage * 1000) * 100 > 41)){ | |
BossPl.get(0).HPImage = HP50; | |
} | |
else if((BossPl.get(0).HP / (stage * 1000) * 100 <= 41) && (BossPl.get(0).HP / (stage * 1000) * 100 > 33)){ | |
BossPl.get(0).HPImage = HP40; | |
} | |
else if((BossPl.get(0).HP / (stage * 1000) * 100 <= 33) && (BossPl.get(0).HP / (stage * 1000) * 100 > 25)){ | |
BossPl.get(0).HPImage = HP30; | |
} | |
else if((BossPl.get(0).HP / (stage * 1000) * 100 <= 25) && (BossPl.get(0).HP / (stage * 1000) * 100 > 17)){ | |
BossPl.get(0).HPImage = HP20; | |
} | |
else if((BossPl.get(0).HP / (stage * 1000) * 100 <= 17) && (BossPl.get(0).HP / (stage * 1000) * 100 > 9)){ | |
BossPl.get(0).HPImage = HP10; | |
} | |
else if((BossPl.get(0).HP / (stage * 1000) * 100 <= 9)){ | |
BossPl.get(0).HPImage = HP0; | |
} | |
switch(spriteflag3){ | |
case 0: | |
switch(BossPl.get(0).sprite) { | |
case 0: | |
BossPl.get(0).Image = Boss1_1; | |
break; | |
case 1: | |
BossPl.get(0).Image = Boss2_1; | |
break; | |
} | |
break; | |
case 1: | |
case 3: | |
switch(BossPl.get(0).sprite){ | |
case 0: | |
BossPl.get(0).Image = Boss1_2; | |
break; | |
case 1: | |
BossPl.get(0).Image = Boss2_2; | |
break; | |
} | |
break; | |
case 2: | |
switch(BossPl.get(0).sprite){ | |
case 0: | |
BossPl.get(0).Image = Boss1_3; | |
break; | |
case 1: | |
BossPl.get(0).Image = Boss2_3; | |
break; | |
} | |
break; | |
} | |
} | |
else if(boss_dead == 1 && BossPl.size() != 0){ | |
switch(spriteflag4){ | |
case 0: | |
switch(BossPl.get(0).sprite){ | |
case 0: | |
BossPl.get(0).Image = Boss1_6; | |
break; | |
case 1: | |
BossPl.get(0).Image = Boss2_6; | |
break; | |
} | |
case 1: | |
switch(BossPl.get(0).sprite){ | |
case 0: | |
BossPl.get(0).Image = Boss1_4; | |
break; | |
case 1: | |
BossPl.get(0).Image = Boss2_4; | |
break; | |
} | |
break; | |
case 2: | |
switch(BossPl.get(0).sprite){ | |
case 0: | |
BossPl.get(0).Image = Boss1_5; | |
break; | |
case 1: | |
BossPl.get(0).Image = Boss2_5; | |
break; | |
} | |
break; | |
case 3: | |
switch(BossPl.get(0).sprite){ | |
case 0: | |
BossPl.get(0).Image = Boss1_5; | |
boss_dead = 2; | |
break; | |
case 1: | |
BossPl.get(0).Image = Boss2_5; | |
boss_dead = 2; | |
break; | |
} | |
break; | |
} | |
} | |
if((HP / (1000 * stage) * 100 <= 100) && (HP / (1000 * stage) * 100 > 92)){ | |
MyHP = HP120; | |
} | |
else if((HP / (1000 * stage)* 100 <= 92) && (HP / (1000 * stage) * 100 > 84)){ | |
MyHP = HP110; | |
} | |
else if((HP / (1000 * stage) * 100 <= 84) && (HP / (1000 * stage) * 100 > 73)){ | |
MyHP = HP90; | |
} | |
else if((HP / (1000 * stage) * 100 <= 73) && (HP / (1000 * stage) * 100 > 65)){ | |
MyHP = HP80; | |
} | |
else if((HP / (1000 * stage) * 100 <= 65) && (HP / (1000 * stage) * 100 > 57)){ | |
MyHP = HP70; | |
} | |
else if((HP / (1000 * stage) * 100 <= 57) && (HP / (1000 * stage) * 100 > 49)){ | |
MyHP = HP60; | |
} | |
else if((HP / (1000 * stage)* 100 <= 49) && (HP /(1000 * stage) * 100 > 41)){ | |
MyHP = HP50; | |
} | |
else if((HP / (1000 * stage) * 100 <= 41) && (HP / (1000 * stage) * 100 > 33)){ | |
MyHP = HP40; | |
} | |
else if((HP/ (1000 * stage) * 100 <= 33) && (HP / (1000 * stage) * 100 > 25)){ | |
MyHP = HP30; | |
} | |
else if((HP / (1000 * stage) * 100 <= 25) && (HP / (1000 * stage)* 100 > 17)){ | |
MyHP = HP20; | |
} | |
else if((HP / (1000 * stage) * 100 <= 17) && (HP / (1000 * stage) * 100 > 9)){ | |
MyHP = HP10; | |
} | |
else if((HP / (1000 * stage) * 100 <= 9)){ | |
MyHP = HP0; | |
} | |
} | |
//적 추가 및 한칸씩 땡기기 | |
public void EnemyAdd(){ | |
if(stage < 6){ | |
if(Enemycount % (150 - (stage * 10)) == 149 - (stage * 10)){ | |
for(int i = 0; i < stage; i++) { | |
EnemyPl.add(new EnemyPlane()); | |
Enemycount = 0; | |
} | |
} | |
} | |
else{ | |
if(Enemycount % 90 == 89) { | |
for(int i = 0; i < 5; i++) { | |
EnemyPl.add(new EnemyPlane()); | |
Enemycount = 0; | |
} | |
} | |
} | |
if(EnemyPl.size() != 0 && Enemycount == 50){ | |
for(int k = 0; k < EnemyPl.size(); k++){ | |
EnemyPl.get(k).Enemy_moveY(); | |
} | |
} | |
} | |
//보스 추가 | |
public void BossAdd(){ | |
if(score >= Math.pow(stage, 2) * 100 && BossPl.size() == 0){ | |
BossPl.add(new BossPlane()); | |
} | |
} | |
//보스 체력 | |
public void BossHP(){ | |
if(BossPl.size() != 0){ | |
if(MyMiss.size() != 0) { | |
for (int i = 0; i < MyMiss.size(); i++) { | |
if ((BossPl.get(0).X - (66 * px_w) < MyMiss.get(i).X) && (BossPl.get(0).X + (66 * px_w) > MyMiss.get(i).X) && | |
(BossPl.get(0).Y - (66 * px_w) < MyMiss.get(i).Y) && (BossPl.get(0).Y + (66 * px_w) > MyMiss.get(i).Y)) { | |
BossPl.get(0).HP -= (MyMiss.get(i).damage); | |
vibe.vibrate(20); | |
MyMiss.remove(i); | |
break; | |
} | |
if (BossPl.get(0).HP < 0) { | |
boss_dead = 1; | |
break; | |
} | |
} | |
} | |
if(boss_dead == 2){ | |
BossPl.remove(0); | |
sdPool.play(EnemExpl, 1, 1, 0, 0, 1); | |
vibe.vibrate(100); | |
boss_dead = 0; | |
stage++; | |
HP = 1000 * stage; | |
} | |
} | |
} | |
//보스 미사일발사 | |
public void BossMiss(){ | |
//미사일 추가 | |
if(stage <= 10){ | |
if(boss_dead == 0 && BossPl.size() != 0 && (Enemycount % (30 - stage) == (29 - stage))){ | |
BossMiss.add(new BossMiss(BossPl.get(0).X, BossPl.get(0).Y)); | |
} | |
} | |
else if(stage > 10){ | |
if(boss_dead == 0 && BossPl.size() != 0 && (Enemycount % 20 == 19)){ | |
BossMiss.add(new BossMiss(BossPl.get(0).X, BossPl.get(0).Y)); | |
} | |
} | |
//미사일 삭제 | |
if(BossMiss.size() > 0) { | |
for (int i = 0; i < BossMiss.size(); i++) { | |
if (stage <= 10) { | |
BossMiss.get(i).Miss_move10(); | |
if (BossMiss.get(i).Y2 > height) { | |
BossMiss.remove(i); | |
break; | |
} | |
} | |
else if (stage > 10) { | |
BossMiss.get(i).Miss_move20(); | |
if (BossMiss.get(i).Y3 > height) { | |
BossMiss.remove(i); | |
break; | |
} | |
} | |
else if (boss_dead == 1){ | |
BossMiss.remove(i); | |
break; | |
} | |
} | |
} | |
} | |
// 미사일이 적에 닿았는지 체크 | |
public void EnemyKill(){ | |
if(EnemyPl.size() > 0 && MyMiss.size() > 1) { | |
for (int k = 0; k < EnemyPl.size(); k++) { | |
int shoot_flag =0; | |
for (int l = 0; l < MyMiss.size(); l++) { | |
if ((EnemyPl.get(k).X - (32 * px_w) < MyMiss.get(l).X) && (EnemyPl.get(k).X + (32 * px_w) > MyMiss.get(l).X) && | |
(EnemyPl.get(k).Y - (32 * px_w) < MyMiss.get(l).Y - (9 * px_w)) && (EnemyPl.get(k).Y + (32 * px_w) > MyMiss.get(l).Y - (9 * px_w))) { | |
EnemyPl.remove(k); | |
MyMiss.remove(l); | |
vibe.vibrate(50); | |
sdPool.play(EnemExpl, 1, 1, 0, 0, 1); | |
shoot_flag = 1; | |
score += 10; | |
break; | |
} | |
} | |
if(shoot_flag == 1){ | |
break; | |
} | |
} | |
} | |
} | |
// 미사일 및 적이 나에 닿았는지 체크 | |
public void PlayerKill(){ | |
if(EnemMiss.size() > 0) { | |
for (int k = 0; k < EnemMiss.size(); k++) { | |
if((myX + (25 * px_w) >= EnemMiss.get(k).X) && (myX - (25 * px_w) <= EnemMiss.get(k).X) && | |
(myY + (25 * px_w) >= EnemMiss.get(k).Y) && (myY - (25 * px_w) <= EnemMiss.get(k).Y)){ | |
HP -= EnemMiss.get(k).damage; | |
vibe.vibrate(50); | |
EnemMiss.remove(k); | |
break; | |
} | |
} | |
} | |
if(EnemyPl.size() > 0){ | |
for (int k = 0; k < EnemyPl.size(); k++) { | |
if((myX + (25 * px_w) >= EnemyPl.get(k).X) && (myX - (25 * px_w) <= EnemyPl.get(k).X) && | |
(myY + (25 * px_w) >= EnemyPl.get(k).Y) && (myY - (25 * px_w) <= EnemyPl.get(k).Y)){ | |
HP -= 100 * stage; | |
vibe.vibrate(50); | |
EnemyPl.remove(k); | |
break; | |
} | |
} | |
} | |
if(BossMiss.size() > 0){ | |
if(stage <= 10) { | |
for (int k = 0; k < BossMiss.size(); k++) { | |
if (((myX + (25 * px_w) >= BossMiss.get(k).X1) && (myX - (25 * px_w) <= BossMiss.get(k).X1) && | |
(myY + (25 * px_w) >= BossMiss.get(k).Y1 + (24 * px_w)) && (myY - (25 * px_w) <= BossMiss.get(k).Y1+ (24 * px_w))) || | |
((myX + (25 * px_w) >= BossMiss.get(k).X2) && (myX - (25 * px_w) <= BossMiss.get(k).X2) && | |
(myY + (25 * px_w) >= BossMiss.get(k).Y2+ (24 * px_w)) && (myY - (25 * px_w) <= BossMiss.get(k).Y2+ (24 * px_w))) || | |
((myX + (25 * px_w) >= BossMiss.get(k).X3) && (myX - (25 * px_w) <= BossMiss.get(k).X3) && | |
(myY + (25 * px_w) >= BossMiss.get(k).Y3+ (24 * px_w)) && (myY - (25 * px_w) <= BossMiss.get(k).Y3+ (24 * px_w)))) { | |
HP -= 50 + (30 * stage); | |
vibe.vibrate(50); | |
BossMiss.remove(k); | |
break; | |
} | |
} | |
} | |
else if(stage > 10) { | |
for (int k = 0; k < BossMiss.size(); k++) { | |
if (((myX + (25 * px_w) >= BossMiss.get(k).X1) && (myX - (25 * px_w) <= BossMiss.get(k).X1 ) && | |
(myY + (25 * px_w) >= BossMiss.get(k).Y1+ (24 * px_w)) && (myY - (25 * px_w) <= BossMiss.get(k).Y1+ (24 * px_w))) || | |
((myX + (25 * px_w) >= BossMiss.get(k).X2) && (myX - (25 * px_w) <= BossMiss.get(k).X2 ) && | |
(myY + (25 * px_w) >= BossMiss.get(k).Y2+ (24 * px_w) ) && (myY - (25 * px_w) <= BossMiss.get(k).Y2+ (24 * px_w))) || | |
((myX + (25 * px_w) >= BossMiss.get(k).X3 ) && (myX - (25 * px_w) <= BossMiss.get(k).X3 ) && | |
(myY + (25 * px_w) >= BossMiss.get(k).Y3+ (24 * px_w)) && (myY - (25 * px_w) <= BossMiss.get(k).Y3+ (24 * px_w))) || | |
((myX + (25 * px_w) >= BossMiss.get(k).X11 ) && (myX - (25 * px_w) <= BossMiss.get(k).X11 ) && | |
(myY + (25 * px_w) >= BossMiss.get(k).Y11+ (24 * px_w)) && (myY - (25 * px_w) <= BossMiss.get(k).Y11+ (24 * px_w))) || | |
((myX + (25 * px_w) >= BossMiss.get(k).X22 ) && (myX - (25 * px_w) <= BossMiss.get(k).X22 ) && | |
(myY + (25 * px_w) >= BossMiss.get(k).Y22+ (24 * px_w)) && (myY - (25 * px_w) <= BossMiss.get(k).Y22+ (24 * px_w))) || | |
((myX + (25 * px_w) >= BossMiss.get(k).X33 ) && (myX - (25 * px_w) <= BossMiss.get(k).X33 ) && | |
(myY + (25 * px_w) >= BossMiss.get(k).Y33+ (24 * px_w)) && (myY - (25 * px_w) <= BossMiss.get(k).Y33+ (24 * px_w)))){ | |
HP -= 50 + (30 * stage); | |
vibe.vibrate(50); | |
BossMiss.remove(k); | |
break; | |
} | |
} | |
} | |
} | |
if(HP < 0){ | |
sdPool.play(MyExpl, 1, 1, 0, 0, 1); | |
vibe.vibrate(1000); | |
deathflag = 1; | |
Intent outIntent = new Intent(getApplicationContext(), MainActivity.class); | |
outIntent.putExtra("score", score); | |
setResult(RESULT_OK, outIntent); | |
finish(); | |
} | |
} | |
// 미사일 쏘기 | |
public void ShootMiss(){ | |
if (MyMiss.size() != 0) { | |
for (int i = 0; i < MyMiss.size(); i++) { | |
MyMiss.get(i).Miss_move(); | |
if (MyMiss.get(i).Y < 0) { | |
MyMiss.remove(i); | |
break; //이거 없으면 remove된 미사일을 인식 못해서 죽을수도 있음 | |
} | |
} | |
} | |
} | |
//적기 움직임 | |
public void EnemyMove(){ | |
if(EnemyPl.size() != 0){ | |
for(int j = 0; j < EnemyPl.size(); j++){ | |
if(EnemyPl.get(j).X < 0){ | |
EnemyPl.get(j).flag = 1; | |
} | |
else if(EnemyPl.get(j).X >= width){ | |
EnemyPl.get(j).flag = -1; | |
} | |
if(EnemyPl.get(j).Y >= height){ | |
EnemyPl.remove(j); | |
break; | |
} | |
EnemyPl.get(j).Enemy_moveX(); | |
} | |
} | |
if(BossPl.size() != 0){ | |
if(BossPl.get(0).X < 0){ | |
BossPl.get(0).flag = 1; | |
} | |
else if(BossPl.get(0).X >= width){ | |
BossPl.get(0).flag = -1; | |
} | |
if(stage < 10){ | |
BossPl.get(0).X += (BossPl.get(0).flag * stage); | |
} | |
else{ | |
BossPl.get(0).X += (BossPl.get(0).flag * 10); | |
} | |
} | |
} | |
//적기 미사일 쏘기 | |
public void EnemyMiss(){ | |
//미사일 추가 | |
if(stage <= 20){ | |
if(EnemyPl.size() != 0 && (Enemycount % (25 - stage) == (24 - stage))){ | |
for(int k = 0; k < EnemyPl.size(); k++){ | |
if(EnemyPl.get(k).X <= myX) { | |
EnemMiss.add(new EnemMiss(EnemyPl.get(k).X, EnemyPl.get(k).Y, 1, EnemyPl.get(k).sprite)); | |
} | |
else{ | |
EnemMiss.add(new EnemMiss(EnemyPl.get(k).X, EnemyPl.get(k).Y, 0, EnemyPl.get(k).sprite)); | |
} | |
} | |
} | |
} | |
else if(stage > 20){ | |
if(EnemyPl.size() != 0 && (Enemycount % 5 == 4)){ | |
for(int k = 0; k < EnemyPl.size(); k++){ | |
if(EnemyPl.get(k).X <= myX) { | |
EnemMiss.add(new EnemMiss(EnemyPl.get(k).X, EnemyPl.get(k).Y, 1, EnemyPl.get(k).sprite)); | |
} | |
else{ | |
EnemMiss.add(new EnemMiss(EnemyPl.get(k).X, EnemyPl.get(k).Y, 0, EnemyPl.get(k).sprite)); | |
} | |
} | |
} | |
} | |
//미사일 삭제 | |
if(EnemMiss.size() > 0) { | |
for (int i = 0; i < EnemMiss.size(); i++) { | |
EnemMiss.get(i).Miss_move(); | |
if (EnemMiss.get(i).Y > height) { | |
EnemMiss.remove(i); | |
break; | |
} | |
} | |
} | |
} | |
//아이템 생성 및 움직이기 | |
public void ItemMove(){ | |
int n = new Random().nextInt() % 250; | |
if(n == 1){ | |
Item.add(new item()); | |
} | |
if(Item.size() != 0){ | |
for(int i = 0; i < Item.size(); i++){ | |
Item.get(i).Y += 10; | |
if(Item.get(i).Y >= height){ | |
Item.remove(i); | |
break; | |
} | |
if((myX + (35 * px_w) >= Item.get(i).X) && (myX - (30 * px_w) <=Item.get(i).X) && | |
(myY + (35 * px_w) >= Item.get(i).Y) && (myY - (30 * px_w) <= Item.get(i).Y)){ | |
sdPool.play(MyHeal, 1, 1, 0, 0, 1); | |
switch(Item.get(i).state){ | |
case 0: | |
if(HP < 1000 * stage - 150) { | |
HP += 150; | |
Item.remove(i); | |
break; | |
} | |
else{ | |
HP = 1000 * stage; | |
Item.remove(i); | |
break; | |
} | |
case 1: | |
damageup = 2; | |
Item.remove(i); | |
break; | |
} | |
} | |
} | |
} | |
} | |
} | |
public class MyMiss { | |
MyMiss(float x, float y) { | |
X = x; | |
Y = y; | |
if(damageup == 2){ | |
Image = MyMissPwUp; | |
} | |
else{ | |
Image = MyMissile; | |
} | |
} | |
float X, Y; | |
Bitmap Image; | |
int weight = new Random().nextInt(30) + 40; | |
double damage = weight * (stage * 0.5) * damageup; | |
public void Miss_move(){ | |
X += 0; | |
Y -= 10; | |
} | |
} | |
public class item{ | |
item(){ | |
X = new Random().nextInt(width - 5) + 5; | |
Y = 0; | |
int a = new Random().nextInt(10); | |
if(BossPl.size() != 0){ | |
if(a < 5){ | |
state = 0; | |
} | |
else{ | |
state = 1; | |
} | |
} | |
else{ | |
if(a < 2){ | |
state = 1; | |
} | |
else{ | |
state = 0; | |
} | |
} | |
switch(state){ | |
case 0: | |
Image = item1; | |
break; | |
case 1: | |
Image = item2; | |
break; | |
} | |
} | |
float Y; | |
float X; | |
int state; | |
Bitmap Image; | |
} | |
public class EnemyPlane{ | |
EnemyPlane(){ | |
Resources res = getResources(); | |
switch(sprite){ | |
case 1: | |
Image = enem1_1; | |
case 2: | |
Image = enem2_1; | |
case 3: | |
Image = enem3_1; | |
} | |
} | |
float X = new Random().nextInt(width) - 5; | |
float Y = 0; | |
int flag = 1; | |
int n = new Random().nextInt(10) + 5; | |
int sprite = new Random().nextInt(3) + 1; | |
Bitmap Image; | |
public void Enemy_moveX(){ | |
X += flag * n; | |
} | |
public void Enemy_moveY(){ | |
Y += 100; | |
} | |
} | |
public class BossPlane { | |
BossPlane() { | |
Resources res = getResources(); | |
switch (sprite) { | |
case 0: | |
Image = Boss1_1; | |
case 1: | |
Image = Boss2_1; | |
} | |
HPImage = HP120; | |
} | |
float X = width / 2; | |
float Y = 0; | |
int flag = 1; | |
double HP = stage * 1500; | |
int sprite = stage % 2; | |
Bitmap Image; | |
Bitmap HPImage; | |
} | |
public class EnemMiss { | |
EnemMiss(float x, float y, int flag, int sprite) { | |
Resources res = getResources(); | |
X = x; | |
Y = y; | |
Flag = flag; | |
switch(sprite){ | |
case 1: | |
Image = enemmiss1; | |
break; | |
case 2: | |
Image = enemmiss2; | |
break; | |
case 3: | |
Image = enemmiss3; | |
break; | |
} | |
if(stage < 20){ | |
damage = new Random().nextInt(30) + (stage * 15); | |
} | |
else if(stage >= 20){ | |
damage = new Random().nextInt(50) + 350; | |
} | |
} | |
float X, Y; | |
int Flag; | |
int damage; | |
Bitmap Image; | |
public void Miss_move(){ | |
if(Flag == 1){ | |
X += 2; | |
Y += 10; | |
} | |
else{ | |
X -= 2; | |
Y += 10; | |
} | |
} | |
} | |
public class BossMiss{ | |
BossMiss(float x, float y) { | |
X1 = x; | |
X2 = x; | |
X3 = x; | |
Y1 = y; | |
Y2 = y; | |
Y3 = y; | |
X11 = x; | |
X22 = x; | |
X33 = x; | |
Y11 = y; | |
Y22 = y; | |
Y33 = y; | |
if(stage < 20){ | |
damage = new Random().nextInt(20) + (stage * 20); | |
} | |
else if(stage >= 20){ | |
damage = new Random().nextInt(50) + 500; | |
} | |
} | |
float X1, X2, X3, Y1, Y2, Y3; | |
float X11, X22, X33, Y11, Y22, Y33; | |
int damage; | |
public void Miss_move10(){ | |
X1 += 4; | |
X3 -= 4; | |
Y1 += (10 + 2* stage); | |
Y2 += (10 + 2*stage); | |
Y3 += (10 + 2*stage); | |
} | |
public void Miss_move20(){ | |
X1 += 7; | |
X2 += 4; | |
X3 += 1; | |
X11 -= 1; | |
X22 -= 4; | |
X33 -= 7; | |
Y1 += (3 + 2 * stage); | |
Y2 += (6 + 2 * stage); | |
Y3 += (10 + 2 * stage); | |
Y11 += (10 + 2 * stage); | |
Y22 += (6 + 2 * stage); | |
Y33 += (3 + 2 * stage); | |
} | |
} | |
class MyView extends View { | |
public MyView(Context context) { | |
super(context); | |
} | |
public void onDraw(Canvas canvas) { //onDraw 함수는 시스템에 변화가 생겼을 때만 리로드된다 | |
Paint text = new Paint(); | |
text.setAntiAlias(true); | |
text.setTextSize(50); | |
text.setColor(Color.BLACK); | |
Typeface t = Typeface.create(Typeface.DEFAULT, Typeface.NORMAL); | |
text.setTypeface(t); | |
canvas.drawColor(0xFFFF9C5A); | |
canvas.drawBitmap(background, 0, BGY, null); //(0, Y) | |
canvas.drawBitmap(background, 0, BGY - (800 * px_w), null); //(0, Y+800) | |
canvas.drawBitmap(MyPlane, myX - (32 * px_w), myY - (32 * px_w), null); | |
canvas.drawBitmap(MyHP, myX - (60 * px_w), myY - (32 * px_w) - 20, null); | |
canvas.drawText("HP : " + HP, myX - (60 * px_w), myY - (32 * px_w) - 40, text); | |
canvas.drawText("Score : " + score, 0, 50, text); | |
canvas.drawText("Stage : " + stage, 550, 50, text); | |
if(EnemyPl.size() != 0){ | |
for(int j = 0; j < EnemyPl.size(); j++){ | |
canvas.drawBitmap(EnemyPl.get(j).Image, EnemyPl.get(j).X - (32 * px_w), EnemyPl.get(j).Y - (32 * px_w), null); | |
} | |
} | |
if(EnemMiss.size() != 0){ | |
for(int k = 0; k < EnemMiss.size(); k++){ | |
canvas.drawBitmap(EnemMiss.get(k).Image, EnemMiss.get(k).X - (9 * px_w), EnemMiss.get(k).Y - (9 * px_w), null); | |
} | |
} | |
if(BossPl.size() != 0){ | |
canvas.drawBitmap(BossPl.get(0).Image, BossPl.get(0).X - (66 * px_w), BossPl.get(0).Y, null); | |
canvas.drawBitmap(BossPl.get(0).HPImage, BossPl.get(0).X - (60 * px_w), BossPl.get(0).Y, null); | |
if(BossMiss.size() != 0){ | |
if(stage <= 10){ | |
for(int i = 0; i < BossMiss.size(); i++){ | |
canvas.drawBitmap(BossMissile, BossMiss.get(i).X1 - (6 *px_w), BossMiss.get(i).Y1 + (24 * px_w), null); | |
canvas.drawBitmap(BossMissile, BossMiss.get(i).X2 - (6 *px_w), BossMiss.get(i).Y2 + (24 * px_w), null); | |
canvas.drawBitmap(BossMissile, BossMiss.get(i).X3 - (6 *px_w), BossMiss.get(i).Y3 + (24 * px_w), null); | |
} | |
} | |
else if(stage > 10){ | |
for(int i = 0; i < BossMiss.size(); i++) { | |
canvas.drawBitmap(BossMissile, BossMiss.get(i).X1 - (6 *px_w), BossMiss.get(i).Y1 + (24 * px_w), null); | |
canvas.drawBitmap(BossMissile, BossMiss.get(i).X2 - (6 *px_w), BossMiss.get(i).Y2 + (24 * px_w), null); | |
canvas.drawBitmap(BossMissile, BossMiss.get(i).X3 - (6 *px_w), BossMiss.get(i).Y3 + (24 * px_w), null); | |
canvas.drawBitmap(BossMissile, BossMiss.get(i).X11 - (6 *px_w), BossMiss.get(i).Y11 + (24 * px_w), null); | |
canvas.drawBitmap(BossMissile, BossMiss.get(i).X22 - (6 *px_w), BossMiss.get(i).Y22 + (24 * px_w), null); | |
canvas.drawBitmap(BossMissile, BossMiss.get(i).X33 - (6 *px_w), BossMiss.get(i).Y33 + (24 * px_w), null); | |
} | |
} | |
} | |
} | |
if (MyMiss.size() != 0) { | |
for (int i = 0; i < MyMiss.size(); i++) { | |
canvas.drawBitmap(MyMiss.get(i).Image, MyMiss.get(i).X - (9 * px_w), MyMiss.get(i).Y - (9 * px_w), null); | |
} | |
} | |
if(Item.size() != 0){ | |
for(int i = 0; i < Item.size(); i++){ | |
canvas.drawBitmap(Item.get(i).Image, Item.get(i).X - (10 * px_w), Item.get(i).Y - (10 * px_w), null); | |
} | |
} | |
} | |
public boolean onTouchEvent(MotionEvent event) { | |
if (event.getAction() == MotionEvent.ACTION_DOWN) { | |
if(event.getY() >= height / 2){ | |
myY = event.getY(); | |
} | |
sdPool.play(shoot, 1, 1, 0, 0, 1); | |
MyMiss.add(new MyMiss(myX, myY)); | |
myX = event.getX(); | |
damagecnt++; | |
if(damagecnt > 30){ | |
damagecnt = 0; | |
damageup = 1; | |
} | |
invalidate(); | |
return true; | |
} | |
if (event.getAction() == MotionEvent.ACTION_MOVE) { | |
count++; | |
if(event.getY() >= height / 2){ | |
myY = event.getY(); | |
} | |
myX = event.getX(); | |
if(count % 20 == 0){ | |
MyMiss.add(new MyMiss(event.getX(), event.getY())); | |
sdPool.play(shoot, 1, 1, 0, 0, 1); | |
damagecnt++; | |
if(damagecnt > 30){ | |
damagecnt = 0; | |
damageup = 1; | |
} | |
count = 0; | |
} | |
return true; | |
} | |
return false; | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.a1126; | |
import androidx.annotation.Nullable; | |
import androidx.appcompat.app.AlertDialog; | |
import androidx.appcompat.app.AppCompatActivity; | |
import android.content.Context; | |
import android.content.DialogInterface; | |
import android.content.Intent; | |
import android.content.SharedPreferences; | |
import android.content.res.Resources; | |
import android.graphics.Bitmap; | |
import android.graphics.BitmapFactory; | |
import android.graphics.Canvas; | |
import android.graphics.Color; | |
import android.graphics.Paint; | |
import android.graphics.Point; | |
import android.graphics.Typeface; | |
import android.media.AudioManager; | |
import android.media.MediaPlayer; | |
import android.media.SoundPool; | |
import android.os.Bundle; | |
import android.os.Handler; | |
import android.os.Message; | |
import android.preference.PreferenceManager; | |
import android.util.DisplayMetrics; | |
import android.view.Display; | |
import android.view.LayoutInflater; | |
import android.view.MotionEvent; | |
import android.view.View; | |
import android.view.Window; | |
import android.view.WindowManager; | |
import android.widget.Button; | |
import android.widget.EditText; | |
import android.widget.FrameLayout; | |
import org.json.JSONArray; | |
import org.json.JSONException; | |
import java.util.ArrayList; | |
import java.util.List; | |
import java.util.Random; | |
public class MainActivity extends AppCompatActivity { | |
public MyView titlevw; | |
public ranking Ranking; | |
static MediaPlayer player; | |
int score = 0; | |
int touchflag1 = 0, touchflag2 = 0; | |
float BGY = -400; | |
int width; | |
int height; | |
int DPI; | |
int px_w; | |
int howtoflag = 0, rankflag = 0; | |
String name1, name4, name5, name2, name3; | |
int score1, score2, score3, score4, score5; | |
String name6, name7, name8, name9, name10; | |
int score6, score7, score8, score9, score10; | |
Bitmap background, title, touch, howto, easter; | |
Handler TitleHandler; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
requestWindowFeature(Window.FEATURE_NO_TITLE); | |
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); | |
Display display = getWindowManager().getDefaultDisplay(); | |
Point size = new Point(); | |
display.getSize(size); | |
width = size.x; | |
height = size.y; | |
DisplayMetrics metrics = new DisplayMetrics(); | |
getWindowManager().getDefaultDisplay().getMetrics(metrics); | |
DPI = metrics.densityDpi; | |
px_w = DPI / 160; | |
player = MediaPlayer.create(this, R.raw.flyaway_loop); | |
player.setVolume(0.7f, 0.7f); | |
player.setLooping(true); | |
player.start(); | |
Ranking = new ranking(); | |
Ranking.load5(); | |
Resources res = getResources(); | |
background = BitmapFactory.decodeResource(res, R.drawable.hw_bg); | |
Bitmap title_ = BitmapFactory.decodeResource(res, R.drawable.hw_title); | |
title = Bitmap.createScaledBitmap(title_, width, 200 * (width / 480), true); | |
Bitmap touch_ = BitmapFactory.decodeResource(res, R.drawable.hw_touch); | |
touch = Bitmap.createScaledBitmap(touch_, width, 32 * (width / 400), true); | |
Bitmap howto_ = BitmapFactory.decodeResource(res, R.drawable.hw_howto); | |
howto = Bitmap.createScaledBitmap(howto_, width, 417*(width / 480), true); | |
Bitmap easter_ = BitmapFactory.decodeResource(res, R.drawable.hw_easteregg); | |
easter = Bitmap.createScaledBitmap(easter_, width, 417*(width / 480), true); | |
titlevw = new MyView(this); | |
setContentView(titlevw); | |
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); | |
View v = inflater.inflate(R.layout.activity_main, null); | |
addContentView(v, new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,FrameLayout.LayoutParams.MATCH_PARENT)); | |
Button ranking_btn = v.findViewById(R.id.ranking_btn); | |
Button howto_btn = v.findViewById(R.id.howto_btn); | |
howto_btn.setOnClickListener(new View.OnClickListener(){ | |
@Override | |
public void onClick(View view){ | |
if (howtoflag == 0) { | |
howtoflag = 1; | |
} | |
else{ | |
howtoflag = 0; | |
rankflag = 0; | |
} | |
} | |
}); | |
ranking_btn.setOnClickListener(new View.OnClickListener(){ | |
@Override | |
public void onClick(View view){ | |
if (rankflag== 0) { | |
rankflag = 1; | |
} | |
else{ | |
howtoflag = 0; | |
rankflag = 0; | |
} | |
} | |
}); | |
TitleHandler = new Handler(){ | |
public void handleMessage(Message msg){ | |
if(msg.what == 1){ | |
BGY += 2; | |
touchflag1++; | |
if(BGY >= 800 * px_w){ | |
BGY = 0; | |
} // 배경 | |
if(touchflag1 % 50 == 49){ | |
if(touchflag2 == 1){ | |
touchflag2 = 0; | |
} | |
else{ | |
touchflag2 = 1; | |
} | |
touchflag1 = 0; | |
} | |
titlevw.invalidate(); | |
TitleHandler.sendEmptyMessageDelayed(1, 10); | |
} | |
} | |
}; | |
TitleHandler.sendEmptyMessage(1); | |
titlevw.setOnClickListener(new MyView.OnClickListener(){ | |
@Override | |
public void onClick(View view) { | |
if (howtoflag == 0 && rankflag == 0) { | |
Intent maintogame = new Intent(MainActivity.this, GameActivity_.class); | |
startActivityForResult(maintogame, 0); | |
} | |
else{ | |
howtoflag = 0; | |
rankflag = 0; | |
} | |
} | |
}); | |
} | |
@Override | |
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data){ | |
if(resultCode == RESULT_OK) { | |
score = data.getIntExtra("score", score); | |
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); | |
builder.setTitle("Your Score is : " + score) | |
.setMessage("Do you want to continue?") | |
.setPositiveButton("예", new DialogInterface.OnClickListener() { | |
@Override | |
public void onClick(DialogInterface dialog, int which) { | |
Intent maintogame = new Intent(MainActivity.this, GameActivity_.class); | |
startActivityForResult(maintogame, 0); | |
} | |
}) | |
.setNegativeButton("아니오", new DialogInterface.OnClickListener() { | |
@Override | |
public void onClick(DialogInterface dialog, int which) { | |
SharedPreferences sharedPreferences = getSharedPreferences("highscore", MODE_PRIVATE); | |
SharedPreferences.Editor editor = sharedPreferences.edit(); | |
editor.putInt("score", score); | |
editor.apply(); | |
finishAffinity(); | |
System.runFinalization(); | |
System.exit(0); | |
} | |
}) | |
.setNeutralButton("등록", new DialogInterface.OnClickListener() { | |
@Override | |
public void onClick(DialogInterface dialog, int which) { | |
final EditText name = new EditText(MainActivity.this); | |
AlertDialog.Builder ranking = new AlertDialog.Builder(MainActivity.this); | |
ranking.setTitle("Setting Score on Ranking") | |
.setMessage("Enter Your Name :") | |
.setView(name) | |
.setPositiveButton("예", new DialogInterface.OnClickListener() { | |
@Override | |
public void onClick(DialogInterface dialog, int which) { | |
String value = name.getText().toString(); | |
Ranking.savehighscore(value, score); | |
Ranking.save5(); | |
dialog.dismiss(); | |
} | |
}) | |
.setNegativeButton("아니오", new DialogInterface.OnClickListener() { | |
@Override | |
public void onClick(DialogInterface dialog, int which) { | |
dialog.dismiss(); | |
} | |
}).setCancelable(false); | |
AlertDialog alertDialog = ranking.create(); | |
alertDialog.show(); | |
; | |
} | |
}) | |
.setCancelable(false); | |
AlertDialog alertDialog = builder.create(); | |
alertDialog.show(); | |
} | |
} | |
class MyView extends View { | |
public MyView(Context context) { | |
super(context); | |
} | |
public void onDraw(Canvas canvas) { //onDraw 함수는 시스템에 변화가 생겼을 때만 리로드된다 | |
Paint text = new Paint(); | |
text.setAntiAlias(true); | |
text.setTextSize(50); | |
text.setColor(Color.BLACK); | |
Typeface t = Typeface.create(Typeface.DEFAULT, Typeface.NORMAL); | |
text.setTypeface(t); | |
canvas.drawColor(0xFFFF9C5A); | |
canvas.drawBitmap(background, 0, BGY, null); //(0, Y) | |
canvas.drawBitmap(background, 0, BGY - 1920 - 300, null); //(0, Y+800) | |
if(howtoflag == 0 && rankflag == 0) { | |
canvas.drawBitmap(title, 0, height / 4, null); | |
canvas.drawText("Highscore : " + score1, 0, 50, text); | |
if (touchflag2 == 0) { | |
canvas.drawBitmap(touch, 0, height * 4 / 5, null); | |
} | |
} | |
else if(howtoflag == 1 && rankflag == 0){ | |
canvas.drawBitmap(howto, 0, height / 4, null); | |
} | |
else if(howtoflag == 0 && rankflag == 1){ | |
canvas.drawText("Rank 1 : " + name1 + ", Score : "+ score1, 0, 50, text); | |
canvas.drawText("Rank 2 : " + name2 + ", Score : "+ score2, 0, 200, text); | |
canvas.drawText("Rank 3 : " + name3 + ", Score : "+ score3, 0, 350, text); | |
canvas.drawText("Rank 4 : " + name4 + ", Score : "+ score4, 0, 500, text); | |
canvas.drawText("Rank 5 : " + name5 + ", Score : "+ score5, 0, 650, text); | |
canvas.drawText("Rank 6 : " + name6 + ", Score : "+ score6, 0, 800, text); | |
canvas.drawText("Rank 7 : " + name7 + ", Score : "+ score7, 0, 950, text); | |
canvas.drawText("Rank 8 : " + name8 + ", Score : "+ score8, 0, 1100, text); | |
canvas.drawText("Rank 9 : " + name9 + ", Score : "+ score9, 0, 1250, text); | |
canvas.drawText("Rank 10 : " + name10 + ", Score : "+ score10, 0, 1400, text); | |
} | |
else{ | |
canvas.drawBitmap(easter, 0, height / 4, null); | |
canvas.drawText("BGM by theFatRat", 0, height - 300, text); | |
canvas.drawText("sfx by Game Freak", 0, height - 250, text); | |
} | |
} | |
} | |
class ranking{ | |
void save5(){ | |
SharedPreferences high = getSharedPreferences("highscore", MODE_PRIVATE); | |
SharedPreferences.Editor editor = high.edit(); | |
editor.putString("no1_name", name1); | |
editor.putString("no2_name", name2); | |
editor.putString("no3_name", name3); | |
editor.putString("no4_name", name4); | |
editor.putString("no5_name", name5); | |
editor.putString("no6_name", name6); | |
editor.putString("no7_name", name7); | |
editor.putString("no8_name", name8); | |
editor.putString("no9_name", name9); | |
editor.putString("no10_name", name10); | |
editor.putInt("no1_score", score1); | |
editor.putInt("no2_score", score2); | |
editor.putInt("no3_score", score3); | |
editor.putInt("no4_score", score4); | |
editor.putInt("no5_score", score5); | |
editor.putInt("no6_score", score6); | |
editor.putInt("no7_score", score7); | |
editor.putInt("no8_score", score8); | |
editor.putInt("no9_score", score9); | |
editor.putInt("no10_score", score10); | |
editor.apply(); | |
} | |
void load5(){ | |
SharedPreferences high = getSharedPreferences("highscore", MODE_PRIVATE); | |
name1 = high.getString("no1_name", "EE"); | |
score1 = high.getInt("no1_score", 0); | |
name2 = high.getString("no2_name", "EE"); | |
score2 = high.getInt("no2_score", 0); | |
name3 = high.getString("no3_name", "EE"); | |
score3 = high.getInt("no3_score", 0); | |
name4 = high.getString("no4_name", "EE"); | |
score4 = high.getInt("no4_score", 0); | |
name5 = high.getString("no5_name", "EE"); | |
score5 = high.getInt("no5_score", 0); | |
name6 = high.getString("no6_name", "EE"); | |
score6 = high.getInt("no6_score", 0); | |
name7 = high.getString("no7_name", "EE"); | |
score7 = high.getInt("no7_score", 0); | |
name8 = high.getString("no8_name", "EE"); | |
score8 = high.getInt("no8_score", 0); | |
name9 = high.getString("no9_name", "EE"); | |
score9 = high.getInt("no9_score", 0); | |
name10 = high.getString("no10_name", "EE"); | |
score10 = high.getInt("no10_score", 0); | |
} | |
void savehighscore(String value, int Score){ | |
if(Score >= score1){ | |
name10 = name9; | |
name9 = name8; | |
name8 = name7; | |
name7 = name6; | |
name6 = name5; | |
name5 = name4; | |
name4 = name3; | |
name3 = name2; | |
name2 = name1; | |
name1 = value; | |
score10 = score9; | |
score9 = score8; | |
score8 = score7; | |
score7 = score6; | |
score6 = score5; | |
score5 = score4; | |
score4 = score3; | |
score3 = score2; | |
score2 = score1; | |
score1 = Score; | |
} | |
else if(Score < score1 && Score >= score2){ | |
name10 = name9; | |
name9 = name8; | |
name8 = name7; | |
name7 = name6; | |
name6 = name5; | |
name5 = name4; | |
name4 = name3; | |
name3 = name2; | |
name2 = value; | |
score10 = score9; | |
score9 = score8; | |
score8 = score7; | |
score7 = score6; | |
score6 = score5; | |
score5 = score4; | |
score4 = score3; | |
score3 = score2; | |
score2 = Score; | |
} | |
else if(Score < score2 && Score>= score3){ | |
name10 = name9; | |
name9 = name8; | |
name8 = name7; | |
name7 = name6; | |
name6 = name5; | |
name5 = name4; | |
name4 = name3; | |
name3 = value; | |
score10 = score9; | |
score9 = score8; | |
score8 = score7; | |
score7 = score6; | |
score6 = score5; | |
score5 = score4; | |
score4 = score3; | |
score3 = Score; | |
} | |
else if(Score < score3 && Score >= score4){ | |
name10 = name9; | |
name9 = name8; | |
name8 = name7; | |
name7 = name6; | |
name6 = name5; | |
name5 = name4; | |
name4 = value; | |
score10 = score9; | |
score9 = score8; | |
score8 = score7; | |
score7 = score6; | |
score6 = score5; | |
score5 = score4; | |
score4 = Score; | |
} | |
else if(Score < score4 && Score >= score5){ | |
name10 = name9; | |
name9 = name8; | |
name8 = name7; | |
name7 = name6; | |
name6 = name5; | |
name5 = value; | |
score10 = score9; | |
score9 = score8; | |
score8 = score7; | |
score7 = score6; | |
score6 = score5; | |
score5 = Score; | |
} | |
else if(Score < score5 && Score >= score6){ | |
name10 = name9; | |
name9 = name8; | |
name8 = name7; | |
name7 = name6; | |
name6 = value; | |
score10 = score9; | |
score9 = score8; | |
score8 = score7; | |
score7 = score6; | |
score6 = Score; | |
} | |
else if(Score < score6 && Score >= score7){ | |
name10 = name9; | |
name9 = name8; | |
name8 = name7; | |
name7 = value; | |
score10 = score9; | |
score9 = score8; | |
score8 = score7; | |
score7 = Score; | |
} | |
else if(Score < score7 && Score >= score8){ | |
name10 = name9; | |
name9 = name8; | |
name8 = value; | |
score10 = score9; | |
score9 = score8; | |
score8 = Score; | |
} | |
else if(Score < score8 && Score >= score9){ | |
name10 = name9; | |
name9 = value; | |
score10 = score9; | |
score9 = Score; | |
} | |
else if(Score < score9 && Score >= score10){ | |
name10 = value; | |
score10 = Score; | |
} | |
} | |
} | |
} |

최종최종최최종과제는 따로있긴 했는데
성적에 크게 영향을 주는 그런과제였어서..
대충 게임내용은 말그대로 슈팅게임
기본예제는 적기 / 플레이어기 / 탄환 정도 구현되어있었고 한방 맞으면 바로 죽는 버전이었는데 게임을 하도 많이하다보니 게임 만드는데에도 오기가 생겨서
플레이어 체력바 구현 + 난이도 구현 + 보스 구현 + 하이스코어 저장기능 구현 + 도움말과 staff credit 이스터에그 버튼까지 넣어놓음
정말 크게 칭찬받은 작품.. 해당 과목 예시로 사용되지않을까 싶어용
이 과목 A+받은 것도 해당 과제가 많이 작용한듯 왜냐면 중간고사를 망쳤었거든
'기타공부 > Android' 카테고리의 다른 글
졸업작품 (Application) (0) | 2021.02.09 |
---|---|
191008 가위바위보 게임 (0) | 2021.02.08 |
190917 초간단 시간표앱 (0) | 2021.02.08 |
191029 안드로이드 수업과제 (0) | 2021.02.08 |
191119 안드로이드 수업과제 (0) | 2021.02.08 |