Kampf

Panda9296

Bekanntes Mitglied
Hi leute

Nehmen wir mal an wir haben ein Objekt und das ist eine Art Spieler egal was. Der hat Leben, einen Namen und Angriffskraft. Wie lasse ich den dann die zwei Objekte mit einander kämpfen?

Wenn das so ungefähr aussieht:

Code:
package de.gfn.zt.miguel.java;

public class Gladiator {

    private String name;
    private int leben;
    private int angriffskraft;
    
    public Gladiator(String name, int leben, int angriffskraft) {
        super();
        this.name = name;
        this.leben = leben;
        this.angriffskraft = angriffskraft;
    }
    
    public int angreifen()
    {
        return angriffskraft;
    }
}
 
K

kneitzel

Gast
Du musst Dir überlegen, wie dein Kampfsystem aussehen soll.

Soll es Rundenbasiert sein? Das ist evtl. am Anfang am einfachsten. Also es gibt jede Runde und in jeder Runde haut der eine den anderen und umgekehrt. Anhand irgendwelcher Kriterien gibt es eine Reihenfolge, d.h. in welcher Reihenfolge hauen die gegenseitig zu.

Und das kannst Du beliebig ausbauen. Minimale Anforderungen sind:
- Beide haben Leben
- Beide reduzieren das Leben des Anderen um einen bestimmten Wert

Das kannst Du aber beliebig ausbauen. Dann gibt es Rüstung, Angriffskraft, Geschicklichkeit, Wertungen für das Ausweichen, Blocken, Verfehlen, ....

Wenn Du es komplex haben willst und dir das nicht selbst ausdenken willst, dann schau nach vorhandenen Spielen. Das Schwarze Auge oder Warhammer (hoffe ich erinnere mich richtig) sind so Spiele, die dann mit Würfeln und so gespielt werden und die teilweise sehr komplexe Systeme haben. (Ich kenne DSA von früher - da hatten wir im Studium eine Gruppe ... das war extrem. Basisregeln und dann konnte man das massiv erweitern und dann gab es ein komplexe Magiesystem oder Schwertkämpfer und so ...

Aber du kannst Dir auch einfach andere Computerspiele ansehen. Da siehst Du dann zwar nicht die Formeln und so, aber Du kannst Dir ansehen, wie da diverse Dinge berechnet werden. World of Warcraft fällt mir da z.B. ein.

Und natürlich kannst Du das alles rein Zeitbasiert laufen lassen.... d.h. jeder hat eine Geschwindigkeit... Dann kann einer immer alle 0,8s einen Angriff durchführen und der Andere hat eine schwere Waffe und kann nur alle 1,2s einen Angriff ausführen .... Oder ein Zauberspruch braucht Vorbereitung, d.h. nach Auslösen der Aktion vergehen 2,5s, bis der Zauberspruch fertig gesprochen ist ...

Aber sowas können wir Dir doch nicht vorgeben. Du musst doch wissen, was Du willst. Und das solltest Du umsetzen.
 

Panda9296

Bekanntes Mitglied
Du musst Dir überlegen, wie dein Kampfsystem aussehen soll.

Soll es Rundenbasiert sein? Das ist evtl. am Anfang am einfachsten. Also es gibt jede Runde und in jeder Runde haut der eine den anderen und umgekehrt. Anhand irgendwelcher Kriterien gibt es eine Reihenfolge, d.h. in welcher Reihenfolge hauen die gegenseitig zu.

Und das kannst Du beliebig ausbauen. Minimale Anforderungen sind:
- Beide haben Leben
- Beide reduzieren das Leben des Anderen um einen bestimmten Wert

Das kannst Du aber beliebig ausbauen. Dann gibt es Rüstung, Angriffskraft, Geschicklichkeit, Wertungen für das Ausweichen, Blocken, Verfehlen, ....

Wenn Du es komplex haben willst und dir das nicht selbst ausdenken willst, dann schau nach vorhandenen Spielen. Das Schwarze Auge oder Warhammer (hoffe ich erinnere mich richtig) sind so Spiele, die dann mit Würfeln und so gespielt werden und die teilweise sehr komplexe Systeme haben. (Ich kenne DSA von früher - da hatten wir im Studium eine Gruppe ... das war extrem. Basisregeln und dann konnte man das massiv erweitern und dann gab es ein komplexe Magiesystem oder Schwertkämpfer und so ...

Aber du kannst Dir auch einfach andere Computerspiele ansehen. Da siehst Du dann zwar nicht die Formeln und so, aber Du kannst Dir ansehen, wie da diverse Dinge berechnet werden. World of Warcraft fällt mir da z.B. ein.

Und natürlich kannst Du das alles rein Zeitbasiert laufen lassen.... d.h. jeder hat eine Geschwindigkeit... Dann kann einer immer alle 0,8s einen Angriff durchführen und der Andere hat eine schwere Waffe und kann nur alle 1,2s einen Angriff ausführen .... Oder ein Zauberspruch braucht Vorbereitung, d.h. nach Auslösen der Aktion vergehen 2,5s, bis der Zauberspruch fertig gesprochen ist ...

Aber sowas können wir Dir doch nicht vorgeben. Du musst doch wissen, was Du willst. Und das solltest Du umsetzen.
ja es ist so. Ich kenne die OOP. Ich kenne die Regeln ich kanns soweit programmieren. Aber wenn es dann um so ein Problem geht frage ich mich schon wie ich das lösen könnte.

Ich habe mich gestern einfach mal daran versucht:

Code:
package de.arenakampf.miguel.java;

import java.util.ArrayList;
import java.util.Scanner;

import javax.swing.JOptionPane;

public class Arena {
    
    
    private ArrayList<Warrior>enemys= new ArrayList<Warrior>();
    private Warrior player;
    Scanner sc= new Scanner(System.in);
    
    
    //addPlayer
    public Warrior addWarrior()
    {
        int points = 50;
        String name = JOptionPane.showInputDialog("Wie soll Ihr Held heißen?");
        System.out.println("Dein Held hat grundsätzlich 50 Leben, 50 Stärke, 50 Skill");
        System.out.println("Wenn du also einen Punkt in Stärke setzt, wird der"
                  + " Standardwert 50 mit 2 multipliziert, was zu einem finalen Ausgangswert führt.");
        
        String healthString=JOptionPane.showInputDialog("Sie haben noch "+points+" Punkte."+" Wie viele Punkte wollen sie "
                                                       + " in zusätzliches Leben investieren?");
        int health = Integer.parseInt(healthString);
        points = points- health;
        if(points>0)
        {
        health= health *50;
        }else {
            System.err.println("Du hast nicht genügend Punkte");
        }
        String strengthString=JOptionPane.showInputDialog("Sie haben noch "+points+" Punkte."+" Wie viele Punkte wollen sie "
                                                          + "in zusätzliche Stärke investieren?");
        int strength= Integer.parseInt(strengthString);
        points = points- strength;
        if(points>0)
        {
            strength= strength*50;
        }
        else
        {
            System.err.println("Du hast nicht genügend Punkte");
        }
        String skillString=JOptionPane.showInputDialog("Sie haben noch "+points+" Punkte."+" Wie viele Punkte wollen sie "
                                                      + "in zusätzliche Skill investieren?");
        int skill = Integer.parseInt(skillString);
        points = points- skill;
        if(points==0)
        {
            return new Warrior(name, health, strength, skill);
        }
        else {
            System.err.println("Deine Punkte wurden nicht richtig verteilt. Versuche es nochmal");
        }
        return player;
        
        }
        //add enemys
        public void addEnemy()
        {
            for(int i =0; i<4;i++)
            {
                this.enemys.add(new Warrior("Andi"+i,i*100,i*3,i*3));
            }
        }
        public Warrior combad(Warrior player,Warrior enemy)
        {
            while(player.getHealth()>0&&enemy.getHealth()>0)
            {
                this.firsthitother(player, enemy);
                if(enemy.getHealth()>0)
                {
                    this.firsthitother(enemy, player);
                }
            }
            if(player.getHealth()>0)
            {
                return player;
            }
            return enemy;
        }
        private void firsthitother(Warrior player,Warrior enemy)
        {
            System.out.println(player.getName()+"haut zu.\n");
            int damage = enemy.getDamage(player.damage());
            System.out.println(enemy.getName()+"verliert "+damage+" Punkte.");
            System.out.println(player.getName()+" hat "+ player.getHealth()+" Punkte."
                    +enemy.getName()+" hat noch "+enemy.getHealth()+" Punkte.");
            
        }
        public void meeting()
        {
            this.player=this.addWarrior();
            this.addEnemy();
            while(player.getHealth()>0&&enemys.size()>0)
            {
                Warrior challenger= this.enemys.get(0);
                Warrior winner = this.combad(player,challenger);
                if(this.player.equals(winner))
                {
                    this.enemys.remove(0);
                }
                if(this.player.getHealth()>0)
                {
                    System.out.println("Sie haben gewonnen");
                }
                else
                {
                    System.out.println("Verlierer");
                }
                    
            }
        }

}
Code:
package de.arenakampf.miguel.java;

public class Main {

    public static void main(String[] args) {
        Arena an = new Arena();
        an.addWarrior();
        an.addEnemy();
        an.meeting();
      
 
    }

}
Code:
package de.arenakampf.miguel.java;

/*
 * 26.05.20
 * @author Miguel Gutierrez
 */
public class Warrior {

    String name;
    int health;
    int strength;
    int skill;
    
    public Warrior(String name, int health, int strength, int skill) {
        super();
        this.name = name;
        this.health = health;
        this.strength = strength;
        this.skill = skill;
    }
  
    //getter and setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    public int getStrength() {
        return strength;
    }

    public void setStrength(int strength) {
        this.strength = strength;
    }

    public int getSkill() {
        return skill;
    }

    public void setSkill(int skill) {
        this.skill = skill;
    }
    //corefunkction
    public int damage()
    {
        return strength*skill;
    }
    public int getDamage(int damage)
    {
        return health=health-damage;
    }

}

Die Arena habe ich einfach selbst nicht richtig hinbekommen. Ich musste im Internet schauen und genau das stört mich ich möchte das einfach können. Deswegen hab ich so blöd gefragt
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Der API den Kampf ansagen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben