fUSSBALL 2.0 beta

This commit is contained in:
Delta1805 2017-09-23 14:12:31 +02:00
parent a0a3604f21
commit 812b2f71c1
12 changed files with 571 additions and 0 deletions

View File

@ -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;
}
}

View File

@ -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();
// }
}
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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(){
//¼lle Feldspieler
for(int i =0; i<10;i++){
spieler[i] = new Spieler();
}
//¼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;
}
}

View File

@ -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");
}
}

View File

@ -0,0 +1,5 @@
package fussballmanager.personen;
public class Ball{
public Spieler s;
}

View File

@ -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;
}
}

View File

@ -0,0 +1,10 @@
package fussballmanager.personen;
import fussballmanager.namegen.Datenbank;
public class Schiedsrichter extends Person{
public Schiedsrichter(){
name = Datenbank.genName();
vorname = Datenbank.genVorname();
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}