Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Azasel
unregistriert
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
import java.util.Random; import java.util.Scanner; public class Main2 { static int enemyPlusHp; static int enemyPlusDmg; static int enemyHp; static int enemyDmg; static int sword; static boolean swordBoolean = true; static int swordChanse; static String swordText = "keins"; static int playerHp = 200; static int playerPlusDmg = 25; static int playerDmg; static int tränke = 3; static int tränkeHp = 50; static int tränkeChanse; static int counter = 0; static boolean runable = true; static boolean alive = true; public static void main(String[] args){ Scanner input = new Scanner(System.in); Random rand = new Random(); System.out.println("\t Dungeon Crawler"); System.out.println("\t ***************"); String[] enemys = {"Zombie","Enderman","Skelett","Creeper","Spinne","Hexe"}; while(runable == true && alive == true){ String enemy = enemys[rand.nextInt(enemys.length)]; if(enemy.equals("Zombie")){ enemyPlusHp = 50; enemyPlusDmg = 10; enemyHp = rand.nextInt(enemyPlusHp)+20; enemyDmg = rand.nextInt(enemyPlusDmg)+10; }else if(enemy.equals("Enderman")){ enemyPlusHp = 70; enemyPlusDmg = 10; enemyHp = rand.nextInt(enemyPlusHp)+20; enemyDmg = rand.nextInt(enemyPlusDmg)+10; }else if(enemy.equals("Skelett")){ enemyPlusHp = 50; enemyPlusDmg = 15; enemyHp = rand.nextInt(enemyPlusHp)+20; enemyDmg = rand.nextInt(enemyPlusDmg)+10; }else if(enemy.equals("Creeper")){ enemyPlusHp = 9; enemyPlusDmg = 50; enemyHp = rand.nextInt(enemyPlusHp)+1; enemyDmg = rand.nextInt(enemyPlusDmg)+50; }else if(enemy.equals("Spinne")){ enemyPlusHp = 40; enemyPlusDmg = 10; enemyHp = rand.nextInt(enemyPlusHp)+30; enemyDmg = rand.nextInt(enemyPlusDmg)+10; }else if(enemy.equals("Hexe")){ enemyPlusHp = 70; enemyPlusDmg = 15; enemyHp = rand.nextInt(enemyPlusHp)+30; enemyDmg = rand.nextInt(enemyPlusDmg)+10; } System.out.println("--------------------------------"); System.out.println("Ein(e) "+enemy+" ist erschienen"); System.out.println("Dein Equip: "+swordText); while(enemyHp >= 1){ playerDmg = rand.nextInt(playerPlusDmg)+10+sword; System.out.println(" "); System.out.println("Was wirst du jetzt machen ?"); System.out.println("\t 1. angreifen"); System.out.println("\t 2. blocken"); System.out.println("\t 3. Heiltrank trinken("+tränke+")"); System.out.println("\t 4. Spielanleitung"); System.out.println("Dein Hp: "+playerHp); System.out.println("Name: "+enemy+". HP: "+enemyHp+". (Dmg: "+enemyDmg+")"); String eingabe = input.nextLine(); System.out.println("-------------------------------"); if(eingabe.equals("1")){ enemyHp -= playerDmg; playerHp -= enemyDmg; System.out.println("Du hast "+enemy+" "+playerDmg+" Schaden zugefügt"); System.out.println(enemy+" hat dir "+enemyDmg+" Schaden zugefügt"); } if(eingabe.equals("2")){ enemyHp -= playerDmg /3; playerHp -= enemyDmg /2; System.out.println("Du hast "+enemy+" "+playerDmg /3+" Schaden zugefügt"); System.out.println(enemy+" hat dir "+enemyDmg /2+" Schaden zugefügt"); } if(eingabe.equals("3")&& tränke > 0){ System.out.print("Du hast ein Trank benutzt"); playerHp += tränkeHp; tränke--; } if(eingabe.equals("4")){ System.out.println("Hier gebe ich dir ein paar Daten mit, die nützlich seien können."); System.out.println("\t Blocken ist das selbe wie angreiffen bloß : Dein Damage verliert 1/3 der Stärke ..."); System.out.println("\t ... Der Gegner allerding, zieht dir nur 1/2 weniger(nützlich bei Creeper)"); System.out.println("Die Chanse ein Schwert einmalig zu droppen liegt bei 10%(ab 3 getöteten Gegnern)"); System.out.println("Die Chanse ein Trank zu droppen liegt bei 20%"); System.out.println("-------------------------------"); System.out.println("Der Aufbau des Codes lehnt sich etwas einem YT Video an ..."); System.out.println("... aber nur das Prinzip, etwa 4/5 des Codes habe ich eigenständing ..."); System.out.println("... implementiert. Auch die Ideen mit dem Schwert und Gegnervariationen"); System.out.println("\n zurück (z)"); System.out.println("-------------------------------"); String zurück = input.nextLine(); } if(playerHp < 1){ alive = false; break; } } counter++; tränkeChanse = rand.nextInt(100); if(tränkeChanse <= 20){ System.out.println("Der Gegner "+enemy+" hat ein Trank fallen gelassen"); tränke++; } swordChanse = rand.nextInt(100); if(counter >= 3 && swordBoolean == true && swordChanse <= 10){ System.out.println("Der Gegner hat ein Schwert(+8 Dmg) fallen gelassen"); sword = 8; swordBoolean = false; } if(swordBoolean == false){ swordText = "Schwert"; //System.out.println("Count:"+counter); } } System.out.println("Du bist gestorben"); System.out.println("Du hast insgesamt "+counter+" Gegner besiegt"); //Exit } } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Azasel
unregistriert
Klassen wären definitiv sinnvoll. Jetzt ist natürlich die Frage "Welche"? Mein Vorschlag wäre eine Klasse zu haben, die für Out- und Input zuständig wäre (sowas wie eine Menüklasse bzw entsprechendes Interface), und eine die in der Lage ist Text basierend auf dem aktuellen Fortschritt auszugeben (und diesen Zustand zu verändern; Stichwort Finite State Machines).
Was mir als erstes in's Auge sprang war das grauenvolle if else (enemy.equals. Das ließe sich ganz prima lösen, indem es eine Klasse für einen Gegner gäbe, die im Konstruktor den Namen, sowie die entsprechenden Werte entgegen nimmt. Dann könnten in 6 Zeilen alle Gegner-Typen wunderbar kompakt erstellt werden.
Deine statischen Variablen resultieren auch nur aus der nicht vorhandenen Objektorientierung.
Stichwort MVC (https://de.wikipedia.org/wiki/Model_View_Controller)
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import java.util.Random; import java.util.Scanner; public class player { static Scanner input = new Scanner(System.in); static Random rand = new Random(); static int playerHp = 200; static int playerDmg = 20; static int enemyDmg; public static void main(String[] args){ enemy gegner1 = new enemy(100, 50, 50); enemy gegner2 = new enemy(80, 40, 40); } } class enemy{ Random rand = new Random(); int enemyHp; int enemyPlusDmg; int enemyDmg; enemy(int Hp, int Dmg, int PlusDmg){ this.enemyHp = Hp; this.enemyDmg = Dmg; this.enemyPlusDmg = PlusDmg; } } |
Heisst das, ich solte versuchen komplett auf Statische Variablen zu verzichten
Für mich nur sehr schwer zu Begreifen, tut mir leid, vielleicht bin ich einfach zu Doff dafür, liegt nicht nur an meinen Englischkenntnissen.
Quellcode |
|
1 2 3 4 |
static int sword; static boolean swordBoolean = true; static int swordChance1;//wegen der Rechtschreibprüfung im Forum umbenannt static String swordText = "keins"; |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Sword { protected int sword = 0; protected boolean swordBoolean = true; protected int chance = 0;//wegen der Rechtschreibprüfung im Forum umbenannt protected String swordText = "keins"; /* * default constructor */ public void Sword (/* evtl. Initialvariablen hier übergeben ... */) { //... } //... } |
Quellcode |
|
1 2 3 4 5 6 7 |
if(enemy.equals("Zombie")){ enemyPlusHp = 50; enemyPlusDmg = 10; enemyHp = rand.nextInt(enemyPlusHp)+20; enemyDmg = rand.nextInt(enemyPlusDmg)+10; } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Ich führe das lieber nochmal explizit aus: Ein Singleton ist nicht dafür gedacht, dass man damit Variablen hält, von denen man nur eine haben will. Ein Singleton ist einzusetzen (und nur dann), wenn es unter gar keinen Umständen jemals mehr als eine Instanz davon geben darf. Jede andere Verwendung ist eine Pseudo-Klassen-Gestaltung einer globalen+statischen Variable. Das ist kein Objekt-Orientierungs-Globale-Variablen-Schönmach-Pattern.sowie beim Design Pattern Singleton, wenn du nur eine Instanz der Klasse haben willst
Azasel
unregistriert
Folgende Klassen wären z.B. bei dir überlegenswert: Player, Enemy, Item, Traenke (ins englische übersetzen), Game (mit Eingaben und Ausgaben, als eine Art Controller)
Quellcode |
|
1 2 3 4 5 6 7 8 |
package dungeon; public class Gamestarter { public static void main(String[] args){ new Game(); } } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
package dungeon; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Scanner; public class Game { private Player player; private List<Enemy> enemies = new ArrayList<>(); private Random rand = new Random(); private Scanner input = new Scanner(System.in); private int pseudo; private boolean runable = true; private boolean alive = true; private boolean shopIn = true; public Game(){ player = new Player(200, 5, 25); while(runable == true && alive == true){ Enemy gegner1 = new Enemy("Zombie", 20, 10, 50, 10, 1, 10, 4, 10); Enemy gegner2 = new Enemy("Skelett", 20, 20, 50, 15, 1, 10, 4, 10); Enemy gegner3 = new Enemy("Creeper", 1, 50, 9, 50, 1, 10, 4, 10); Enemy gegner4 = new Enemy("Enderman", 20, 10, 70, 10, 5, 10, 5, 20); Enemy gegner5 = new Enemy("Spinne", 30, 10, 40, 10, 1, 10, 4, 10); Enemy gegner6 = new Enemy("Hexe", 30, 10, 70, 15, 5, 10, 5, 20); //Gegner in die Liste eintragen enemies.add(gegner1); enemies.add(gegner2); enemies.add(gegner3); enemies.add(gegner4); enemies.add(gegner5); enemies.add(gegner6); //zufällig einen Gegner auswählen pseudo = rand.nextInt(enemies.size()); //neuer Gegner spawnen lassen System.out.println("--------------------------------"); System.out.println("Ein(e) "+enemies.get(pseudo).getName()+" ist erschienen"); System.out.println("Dein Level: "+player.getLevel()); while(enemies.get(pseudo).getHp() >= 1){ System.out.println(" "); System.out.println("Was wirst du jetzt machen ?"); System.out.println("\t 1. angreifen"); System.out.println("\t 2. blocken"); System.out.println("\t 3. Heiltrank trinken ("+player.getTränke()+")"); System.out.println("\t 4. Bombe werfern ("+player.getBomben()+")"); System.out.println("Dein Hp: "+player.getHp()); System.out.println("Name: "+enemies.get(pseudo).getName()+". HP: "+enemies.get(pseudo).getHp()+". (Dmg: "+enemies.get(pseudo).getDmg()+")"); String eingabe = input.nextLine(); System.out.println("-------------------------------"); //angreifen if(eingabe.equals("1")){ player.setHp(enemies.get(pseudo).getDmg()); enemies.get(pseudo).setHp(player.getDmg()); System.out.println("Du hast "+enemies.get(pseudo).getName()+" "+player.getDmg()+" Schaden zugefügt"); System.out.println(enemies.get(pseudo).getName()+" hat dir "+enemies.get(pseudo).getDmg()+" Schaden zugefügt"); } if(eingabe.equals("2")){ player.setHp(enemies.get(pseudo).getDmg() /2); enemies.get(pseudo).setHp(player.getDmg() /3); System.out.println("Du hast "+enemies.get(pseudo).getName()+" "+player.getDmg()/3+" Schaden zugefügt"); System.out.println(enemies.get(pseudo).getName()+" hat dir "+enemies.get(pseudo).getDmg()/2+" Schaden zugefügt"); } if(eingabe.equals("3")&& player.getTränke() > 0){ System.out.print("Du hast ein Trank benutzt"); player.setHp(-50); player.setTränke(-1); } if(eingabe.equals("4")&& player.getBomben() >= 1){ player.setBomben(1); enemies.get(pseudo).setHp(60); System.out.println("Du hast "+enemies.get(pseudo).getName()+" 60 Schaden zugefügt"); } } } } } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
package dungeon; import java.util.Random; public class Entity { private Random rand = new Random(); private String name; private int hp; private int dmg; private int randomHp; private int randomDmg; private int plusHp; private int plusDmg; private int coints; private int xp; private int plusCoints; private int plusXp; private int randomCoints; private int randomXp; public Entity(String name, int plusHp, int plusDmg, int randomHp, int randomDmg, int plusCoints, int plusXp, int randomCoints, int randomXp){ this.name = name; this.hp = rand.nextInt(randomHp)+plusHp; this.dmg = rand.nextInt(randomDmg)+plusDmg; this.coints = rand.nextInt(randomCoints)+plusCoints; this.xp = rand.nextInt(randomXp)+plusXp; } public Entity(int hp, int plusDmg, int randomDmg){ this.hp = hp; this.dmg = rand.nextInt(randomDmg)+plusDmg; } public void setHp(int gegner){ hp -= gegner; } public int getHp(){ return hp; } public int getDmg(){ return dmg; } public String getName(){ return name; } } |
Quellcode |
|
1 2 3 4 5 6 7 8 |
package dungeon; public class Enemy extends Entity { public Enemy(String name, int plusHp, int plusDmg, int randomHp, int randomDmg, int plusCoints, int plusXp, int randomCoints, int randomXp){ super(name, plusHp, plusDmg, randomHp, randomDmg, plusCoints, plusXp, randomCoints, randomXp); } } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package dungeon; public class Player extends Entity{ private int coints = 0; private int xp = 0; private int level = 0; private int tränke = 3; private int bomben = 1; public Player(int hp, int plusDmg, int randomDmg) { super(hp, plusDmg, randomDmg); } public int getLevel(){ return level; } public int getTränke(){ return tränke; } public int getCoints(){ return coints; } public int getBomben(){ return bomben; } public void setTränke(int zahl){ this.tränke += zahl; } public void setBomben(int zahl){ this.bomben -= zahl; } public void setCoints(int zahl){ this.coints += zahl; } } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »IsaacCohen« (19.08.2016, 22:00)
Werbeanzeige