fUSSBALL 2.0 beta
This commit is contained in:
parent
a0a3604f21
commit
812b2f71c1
|
|
@ -0,0 +1,29 @@
|
|||
package fussballmanager;
|
||||
|
||||
public class Flugbahn {
|
||||
//Steigung m
|
||||
//Y-Achsen abschnitt b
|
||||
//Definitionsbereich x1 und x2 + y1 und y2
|
||||
|
||||
double m,b;
|
||||
Position p1,p2;
|
||||
|
||||
public Flugbahn(Position p1,Position p2) {
|
||||
m = (p1.y-p2.y)/(p1.x-p2.x);
|
||||
b = p1.y+m*p1.x;
|
||||
}
|
||||
|
||||
public double f(double x){
|
||||
return m*x+b;
|
||||
}
|
||||
|
||||
public boolean isInRange(Position p){
|
||||
if(p1.x<p.x&&p2.x>p.x||p1.x>p.x&&p2.x<p.x){
|
||||
//Punkt liegt im Definitionsbereich
|
||||
if(Math.abs(p.y-f(p.x))<0.5){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package fussballmanager;
|
||||
|
||||
import fussballmanager.personen.Schiedsrichter;
|
||||
|
||||
public class Main {
|
||||
static Team t1;
|
||||
static Team t2;
|
||||
static Schiedsrichter schiri;
|
||||
static Spiel spiel;
|
||||
|
||||
public static void main(String[] args) {
|
||||
t1 = new Team();
|
||||
t2 = new Team();
|
||||
schiri = new Schiedsrichter();
|
||||
spiel = new Spiel(t1,t2,schiri);
|
||||
for(int i = 0; i < 5400; i++){
|
||||
spiel.tick();
|
||||
System.out.println(spiel.getSpielzeit());
|
||||
// try {
|
||||
// Thread.sleep(200);
|
||||
// } catch (InterruptedException e) {
|
||||
// TODO Auto-generated catch block
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package fussballmanager;
|
||||
|
||||
public class Position {
|
||||
|
||||
double x,y;
|
||||
|
||||
public Position(double x,double y){
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
//Berechnung der Distanz zwischen zwei Punkten/Positionen mittels Satz des Pytagoras
|
||||
public double getDistance(Position p){
|
||||
double a,b;
|
||||
a = Math.abs(x-p.x);
|
||||
b = Math.abs(y-p.y);
|
||||
return Math.sqrt(a*a+b*b);
|
||||
}
|
||||
|
||||
public void moveTo(Position t,double d){
|
||||
double cosT = (x - t.x)/getDistance(t);
|
||||
double cosA = (y - t.y)/getDistance(t);
|
||||
double ax = cosT*d;
|
||||
double ay = cosA*d;
|
||||
x += ax;
|
||||
y += ay;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "X: "+x+" Y: "+y;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,198 @@
|
|||
package fussballmanager;
|
||||
|
||||
import java.math.RoundingMode;
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
import java.text.NumberFormat;
|
||||
import java.util.Random;
|
||||
|
||||
import fussballmanager.personen.*;
|
||||
|
||||
public class Spiel {
|
||||
int spielzeit;
|
||||
int verlängerung;
|
||||
Team heimteam;
|
||||
Team auswärtsteam;
|
||||
Schiedsrichter schiri;
|
||||
Ball b;
|
||||
//true = heim | false = auswärts
|
||||
boolean ballBesitz;
|
||||
|
||||
public Spiel(Team heim, Team aus, Schiedsrichter s) {
|
||||
this.heimteam = heim;
|
||||
this.auswärtsteam = aus;
|
||||
this.schiri = s;
|
||||
ballBesitz = ((int) Math.random()) == 0 ? true : false;
|
||||
spielzeit = 0;
|
||||
heimteam.setPositions(true);
|
||||
auswärtsteam.setPositions(false);
|
||||
b = new Ball();
|
||||
if(ballBesitz){
|
||||
b.s = heimteam.spieler[9];
|
||||
}else{
|
||||
b.s = auswärtsteam.spieler[9];
|
||||
}
|
||||
}
|
||||
|
||||
public void tick() {
|
||||
spielzeit++;
|
||||
movePhase();
|
||||
attackPhase();
|
||||
|
||||
}
|
||||
|
||||
private void movePhase(){
|
||||
Team ballteam;
|
||||
Team nichtballteam;
|
||||
if(ballBesitz){
|
||||
ballteam = heimteam;
|
||||
nichtballteam = auswärtsteam;
|
||||
}else{
|
||||
ballteam = auswärtsteam;
|
||||
nichtballteam = heimteam;
|
||||
}
|
||||
for(Spieler s:ballteam.spieler){
|
||||
double d = s.geschwindigkeit;
|
||||
if(s.hasBall()) d-=1;
|
||||
s.p.moveTo(nichtballteam.torwart.p, d);
|
||||
System.out.println(s.getname()+ " läuft!");
|
||||
}
|
||||
for(Spieler s:nichtballteam.spieler){
|
||||
String a = s.p.toString();
|
||||
s.p.moveTo(b.s.p, s.geschwindigkeit);
|
||||
System.out.println(s.getname()+ " läuft! von "+a+" zu "+s.p.toString());
|
||||
}
|
||||
}
|
||||
|
||||
private void attackPhase() {
|
||||
Team ballteam;
|
||||
Team nichtballteam;
|
||||
if (ballBesitz) {
|
||||
ballteam = heimteam;
|
||||
nichtballteam = auswärtsteam;
|
||||
} else {
|
||||
ballteam = auswärtsteam;
|
||||
nichtballteam = heimteam;
|
||||
}
|
||||
for (Spieler s : ballteam.spieler) {
|
||||
if (s.hasBall()) {
|
||||
boolean weiter = true;
|
||||
for (Spieler g : nichtballteam.spieler) {
|
||||
if (weiter)
|
||||
if (s.p.getDistance(g.p) < 0.5) {
|
||||
if (g.getAttack() > s.getDef()) {
|
||||
int rng = new Random().nextInt(100);
|
||||
if (rng < 89) {
|
||||
// Ball wurde abgenommen
|
||||
System.out.println(s.getname() + " gab Ball an " + g.getname());
|
||||
g.takeBall(s);
|
||||
s.motivation -= 20;
|
||||
}
|
||||
if (rng < 90) {
|
||||
|
||||
}
|
||||
if (rng < 101) {
|
||||
Spieler t = null;
|
||||
double d = 200;
|
||||
for (Spieler temp : ballteam.spieler) {
|
||||
if (s.p.getDistance(temp.p) < d && !temp.equals(s)) {
|
||||
d = s.p.getDistance(temp.p);
|
||||
t = temp;
|
||||
}
|
||||
}
|
||||
Flugbahn fb = new Flugbahn(s.p, t.p);
|
||||
boolean succes = false;
|
||||
for (Spieler temp : nichtballteam.spieler) {
|
||||
if (fb.isInRange(temp.p)) {
|
||||
// Pass wurde unterbrochen
|
||||
temp.takeBall(s);
|
||||
succes = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!succes) {
|
||||
// Ball wurde weg gepasst
|
||||
t.takeBall(s);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Spieler t = null;
|
||||
double d = 200;
|
||||
for (Spieler temp : ballteam.spieler) {
|
||||
if (s.p.getDistance(temp.p) < d && !temp.equals(s)) {
|
||||
d = s.p.getDistance(temp.p);
|
||||
t = temp;
|
||||
}
|
||||
}
|
||||
Flugbahn fb = new Flugbahn(s.p, t.p);
|
||||
boolean succes = false;
|
||||
for (Spieler temp : nichtballteam.spieler) {
|
||||
if (fb.isInRange(temp.p)) {
|
||||
// Pass wurde unterbrochen
|
||||
temp.takeBall(s);
|
||||
succes = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!succes) {
|
||||
// Ball wurde weg gepasst
|
||||
t.takeBall(s);
|
||||
}
|
||||
}
|
||||
//
|
||||
weiter = false;
|
||||
}
|
||||
}
|
||||
if (weiter) {
|
||||
double tordis = s.p.getDistance(nichtballteam.torwart.p);
|
||||
Spieler t = null;
|
||||
boolean ss = false;
|
||||
for (Spieler m : ballteam.spieler) {
|
||||
|
||||
if (!m.equals(s)) {
|
||||
if (m.p.getDistance(nichtballteam.torwart.p) < tordis) {
|
||||
t = m;
|
||||
ss = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (t != null&&ss) {
|
||||
Flugbahn fb = new Flugbahn(s.p, t.p);
|
||||
boolean succes = false;
|
||||
for (Spieler temp : nichtballteam.spieler) {
|
||||
if (fb.isInRange(temp.p)) {
|
||||
// Pass wurde unterbrochen
|
||||
temp.takeBall(s);
|
||||
succes = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!succes) {
|
||||
System.out.println(s.getname() + " passt Ball an " + t.getname());
|
||||
// Ball wurde weg gepasst
|
||||
t.takeBall(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public String getSpielzeit() {
|
||||
String r = "";
|
||||
NumberFormat numberFormat = new DecimalFormat("0");
|
||||
numberFormat.setRoundingMode(RoundingMode.DOWN);
|
||||
r += "Spielzeit: " + numberFormat.format(this.spielzeit / 60) + ":";
|
||||
if (spielzeit % 60 < 10){
|
||||
r += "0";
|
||||
}
|
||||
r += spielzeit % 60;
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
package fussballmanager;
|
||||
|
||||
import fussballmanager.namegen.Datenbank;
|
||||
import fussballmanager.personen.*;
|
||||
|
||||
public class Team {
|
||||
String name;
|
||||
Trainer trainer;
|
||||
Spieler[] spieler = new Spieler[10];
|
||||
Torwart torwart;
|
||||
int siege = 0;
|
||||
|
||||
public Team(String name){
|
||||
this.name = name;
|
||||
fülleTeam();
|
||||
addTrainer();
|
||||
}
|
||||
|
||||
public Team(){
|
||||
this.name = Datenbank.genName()+"'s Team";
|
||||
fülleTeam();
|
||||
addTrainer();
|
||||
}
|
||||
|
||||
public void fülleTeam(){
|
||||
//Fülle Feldspieler
|
||||
for(int i =0; i<10;i++){
|
||||
spieler[i] = new Spieler();
|
||||
}
|
||||
//Fülle Torwart
|
||||
torwart = new Torwart();
|
||||
}
|
||||
|
||||
public void addTrainer(){
|
||||
trainer = new Trainer();
|
||||
}
|
||||
|
||||
public void setPositions(boolean heim){
|
||||
if (heim){
|
||||
torwart.p.x = 5;
|
||||
torwart.p.y = 22.5;
|
||||
for(int i = 0; i < 3; i++){
|
||||
spieler[i].p.x = 20;
|
||||
spieler[i].p.y = 7.5+15*i;
|
||||
}
|
||||
for(int i = 3; i < 7; i++){
|
||||
spieler[i].p.x = 38;
|
||||
spieler[i].p.y =5.625+11.25*i;
|
||||
}
|
||||
for(int i = 7; i < 9; i++){
|
||||
spieler[i].p.x = 52;
|
||||
spieler[i].p.y =11.25+22.5*i;
|
||||
}
|
||||
spieler[9].p.x=44;
|
||||
spieler[9].p.y=45;
|
||||
}else{
|
||||
torwart.p.x = 90-5;
|
||||
torwart.p.y = 22.5;
|
||||
for(int i = 0; i < 3; i++){
|
||||
spieler[i].p.x = 90-20;
|
||||
spieler[i].p.y = 7.5+15*i;
|
||||
}
|
||||
for(int i = 3; i < 7; i++){
|
||||
spieler[i].p.x = 90-38;
|
||||
spieler[i].p.y =5.625+11.25*i;
|
||||
}
|
||||
for(int i = 7; i < 9; i++){
|
||||
spieler[i].p.x = 90-52;
|
||||
spieler[i].p.y =11.25+22.5*i;
|
||||
}
|
||||
spieler[9].p.x=46;
|
||||
spieler[9].p.y=45;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean isInTeam(Person p){
|
||||
for(Person pp:spieler){
|
||||
if(p.equals(pp)) return true;
|
||||
}
|
||||
if(torwart.equals(p)) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
package fussballmanager.namegen;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Datenbank {
|
||||
int n = 100;
|
||||
static int counterName = 0;
|
||||
static int counterVorname = 0;
|
||||
static int counterBeiname = 0;
|
||||
static String[] nameFeld;
|
||||
static ArrayList<String> namen = new ArrayList<String>();//
|
||||
static ArrayList<String> vornamen = new ArrayList<String>();
|
||||
static ArrayList<String> beinamen = new ArrayList<String>();
|
||||
|
||||
public static String genName(){
|
||||
String r = "";
|
||||
namenListeFüllen();
|
||||
r += namen.get((int) (Math.random() * namen.size()));
|
||||
return r;
|
||||
}
|
||||
|
||||
public static String genVorname(){
|
||||
String r = "";
|
||||
vornameFeldFüllen();
|
||||
r += vornamen.get((int) (Math.random() * vornamen.size()));
|
||||
return r;
|
||||
}
|
||||
|
||||
static void namenListeFüllen(){
|
||||
namen.add("Günter");//
|
||||
namen.add("Diabetes");
|
||||
namen.add("Dextrose");
|
||||
namen.add("Hackschnetzler");
|
||||
namen.add("Rasur");
|
||||
namen.add("Algrim");
|
||||
namen.add("Schmitz");
|
||||
namen.add("Wühl");
|
||||
namen.add("Hommers");
|
||||
namen.add("Dagoba");
|
||||
}
|
||||
|
||||
static void vornameFeldFüllen(){
|
||||
vornamen.add("Günter");//
|
||||
vornamen.add("Gorden");
|
||||
vornamen.add("Dr.");
|
||||
vornamen.add("Profi");
|
||||
vornamen.add("Hommers");
|
||||
vornamen.add("Metti");
|
||||
vornamen.add("Moriz");
|
||||
vornamen.add("Läon");
|
||||
vornamen.add("Hommers");
|
||||
vornamen.add("Willi");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package fussballmanager.personen;
|
||||
|
||||
public class Ball{
|
||||
public Spieler s;
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package fussballmanager.personen;
|
||||
|
||||
import fussballmanager.Team;
|
||||
|
||||
public abstract class Person {
|
||||
int alter;
|
||||
Team team;
|
||||
String name,vorname;
|
||||
|
||||
public void setTeam(Team team){
|
||||
this.team = team;
|
||||
}
|
||||
|
||||
public Team getTeam(){
|
||||
return team;
|
||||
}
|
||||
|
||||
public boolean isInTeam(Person p){
|
||||
return team.isInTeam(p);
|
||||
}
|
||||
|
||||
public String getname() {
|
||||
return vorname + " " + name;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
package fussballmanager.personen;
|
||||
|
||||
import fussballmanager.namegen.Datenbank;
|
||||
|
||||
public class Schiedsrichter extends Person{
|
||||
public Schiedsrichter(){
|
||||
name = Datenbank.genName();
|
||||
vorname = Datenbank.genVorname();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
package fussballmanager.personen;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import fussballmanager.Position;
|
||||
import fussballmanager.namegen.Datenbank;
|
||||
|
||||
public class Spieler extends Person {
|
||||
int stärke;
|
||||
int verteidigung;
|
||||
int tore;
|
||||
public int motivation;
|
||||
public double geschwindigkeit;
|
||||
public Position p;
|
||||
Ball b;
|
||||
int karte = 0;
|
||||
|
||||
public int getAttack() {
|
||||
return (int) (stärke+(0.2*motivation));
|
||||
}
|
||||
|
||||
public int getDef() {
|
||||
return (int) (verteidigung+(0.2*motivation));
|
||||
}
|
||||
|
||||
|
||||
public void setBall(Ball b){
|
||||
this.b = b;
|
||||
}
|
||||
|
||||
public void takeBall(Spieler s){
|
||||
b = s.b;
|
||||
b.s = s;
|
||||
s.b = null;
|
||||
}
|
||||
|
||||
public Spieler(int stärke, int verteidigung, int alter, String vorname,
|
||||
String name) {
|
||||
this.stärke = stärke;
|
||||
this.verteidigung = verteidigung;
|
||||
this.alter = alter;
|
||||
this.vorname = vorname;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Spieler() {
|
||||
int random = new Random().nextInt(100);
|
||||
this.verteidigung = random;
|
||||
this.stärke = 100-random;
|
||||
this.geschwindigkeit = 4+Math.random()*2;
|
||||
this.vorname = Datenbank.genVorname();
|
||||
this.name = Datenbank.genName();
|
||||
p = new Position(0,0);
|
||||
}
|
||||
|
||||
public boolean hasBall() {
|
||||
if(b!=null) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package fussballmanager.personen;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import fussballmanager.Position;
|
||||
import fussballmanager.namegen.Datenbank;
|
||||
|
||||
public class Torwart extends Spieler{
|
||||
|
||||
public Torwart() {
|
||||
int random = new Random().nextInt(100);
|
||||
this.verteidigung = random;
|
||||
this.stärke = 100-random;
|
||||
this.geschwindigkeit = 4+Math.random()*2;
|
||||
this.vorname = Datenbank.genVorname();
|
||||
this.name = Datenbank.genName();
|
||||
p = new Position(0,0);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package fussballmanager.personen;
|
||||
|
||||
import fussballmanager.namegen.Datenbank;
|
||||
|
||||
public class Trainer extends Person{
|
||||
int inspiration;
|
||||
int erfahrung = 0;
|
||||
|
||||
public Trainer(){
|
||||
this.name = Datenbank.genName();
|
||||
this.vorname = Datenbank.genVorname();
|
||||
this.inspiration = (int) (Math.random()*100);
|
||||
}
|
||||
|
||||
public Trainer(String vorname, String name, int inspiration){
|
||||
this.name = name;
|
||||
this.vorname = vorname;
|
||||
this.inspiration = inspiration;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue