public class Start extends JApplet implements Runnable{
/**
*
*/
private static final long serialVersionUID = 1L;
final int SinNachUnten=210;
final int SinNachRechts=30;
static int Ausgleich=0;
static int NeuesBild=0;
final int lira=60;
final int obra=170;
int FeldgrösseX=480;
int FeldgrösseY=300;
int Unitalt=0;
int Anzahl=0;
int count=1;
int init=0;
private Thread thread;
private boolean stopThread = false;
Image img_doc, img_rip, img_pokal, img_wave, img_accu;
Random r = new Random();
GUI_Feld Feld;
GUI_Status status;
GUI_Bedienfeld bedienfeld;
initialisiereMenu menu;
JMenuBar JMB;
Berechnungen berechnungen;
Container contentPane;
int Morgenessen=0;
int Mittagessen=0;
int Abendessen=0;
double Glucose=0;
double realtime=0;
double time=0;
double start=0;
double glucoseStart=0;
double BasalGlucose=0;
int meal=0;
double mealsize=0;
double Insulin=0;
double randomstart;
double randomglucose;
double randomBG;
double mealtime = 0;
int Geschw=0;
int BildAusgegeben=0;
public void init(){
contentPane = getContentPane();
//contentPane.setBackground(Color.BLACK);
contentPane.setBackground(Color.white);
status = new GUI_Status();
bedienfeld = new GUI_Bedienfeld(260, 100,Feld);
berechnungen = new Berechnungen();
JMB = new JMenuBar();
menu = new initialisiereMenu(JMB,bedienfeld);
setJMenuBar(JMB);
randomstart = berechnungen.randomStart();
randomglucose=berechnungen.randomGlucose();
randomBG = berechnungen.randomBG();
JPanel jp=new JPanel();
//jp.setBackground(Color.black);
//this.setBackground(Color.BLACK);
jp.setBackground(Color.white);
this.setBackground(Color.white);
JPanel p= new JPanel();
JLabel tl = new JLabel();
tl.setFont(new Font("Arial",Font.BOLD,20));
Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
Dimension screen_size = toolkit.getScreenSize();
int width = screen_size.width;
int height = screen_size.height;
System.out.println("Screen Size width "+width+" height "+height);
//Bilder vorladen
img_doc=getImage(getCodeBase(),"DOC.PNG");
img_rip=getImage(getCodeBase(),"RIP.PNG");
img_pokal=getImage(getCodeBase(),"POKAL.PNG");
img_wave=getImage(getCodeBase(),"LOGO.PNG");
img_accu=getImage(getCodeBase(),"ACCUCHEK.PNG");
MediaTracker mt = new MediaTracker(this);
mt.addImage(img_wave, 1);
mt.addImage(img_doc, 2);
mt.addImage(img_rip, 3);
mt.addImage(img_pokal, 4);
try {
//Warten, bis das Image vollständig geladen ist,
mt.waitForAll();
} catch (InterruptedException e) {
//nothing
System.out.println(""+e);
}
Feld = new GUI_Feld(bedienfeld,FeldgrösseX, FeldgrösseY, lira, obra, width, img_wave, img_accu);
//setSize(1020,650);
setSize(width-10,height-150);
getContentPane().setLayout(new BorderLayout());
p.setLayout(new BorderLayout());
p.add(BorderLayout.CENTER,bedienfeld);
//p.add(BorderLayout.EAST, new JLabel(" "));
contentPane.add(BorderLayout.SOUTH,status);
contentPane.add(BorderLayout.EAST,p);
contentPane.add(BorderLayout.NORTH,new JLabel(" "));
p = new JPanel();
p.setLayout(new GridLayout(4,1));
tl.setText(" Learn in a playful form the interrelation of insulin and glucose");
p.add(new JLabel(" "));
/*p.add(new JLabel(" "));
p.add(new JLabel(" "));
p.add(new JLabel(" "));*/
p.add(new JLabel(" "));
p.add(new JLabel(" "));
p.add(tl);
p.setBackground(Color.white);
contentPane.add(BorderLayout.NORTH,p);
status.statusAusgeben("Welcome to ArtDiab v2");
esseninit();
System.out.println("ende init");
//this.setVisible(true); //war drin ging bis jetzt
setVisible(true);
Feld.paint(getGraphics());
}
public void start(){
if (thread == null){
thread = new Thread(this);
stopThread = false;
thread.start();
}
Feld.paint(getGraphics());
this.setVisible(true);
init=0;
repaint();
}
int SimuLoop=1;
public void run() {
int Delay=0;
berechnungen.BGinit();
//setVisible(true);
setJMenuBar(JMB);
//setVisible(true);//war drin
repaint();
//validate();
System.out.println("in run");
while (thread!=null){
if(stopThread==true)
return;
//this.setVisible(true);//war drin
Geschw= bedienfeld.WelcheGeschwindigkeit();
try{
Thread.sleep(Geschw);
}catch(InterruptedException e){
System.out.println("e");
}
if (menu.FeldLöschen()==1){
Feld.FeldLöschen(bedienfeld,berechnungen,menu,getGraphics());
init=0;
NeuesBild=0;
status.statusAusgeben("Welcome to ArtDiab v2");
SimuLoop=1;
esseninit();
BildAusgegeben=0;
Feld.paint(getGraphics());
}
if (menu.FeldNeuZeichnen==1){
menu.FeldNeuZeichnen=0;
Feld.paint(getGraphics());
repaint();
}
if(SimuLoop<=240 & bedienfeld.StartGedrückt==1){
Delay = bedienfeld.Delay();
Insulin = bedienfeld.InsulinGedrückt();
realtime=berechnungen.realTime(SimuLoop);
BasalGlucose=berechnungen.basalGlucose(realtime,randomglucose,randomstart);
berechnungen.BGarrey(SimuLoop,0,BasalGlucose,0);
berechnungen.CalcBasalInsulin(Delay, SimuLoop, bedienfeld);
if(SimuLoop >= mealtime){
berechnungen.CalcMeal(SimuLoop);
if(Delay==0)
berechnungen.BGvalue(berechnungen.BGarray,SimuLoop,0);
else{
if(SimuLoop>=2)
berechnungen.BGvalue(berechnungen.BGarray,SimuLoop,2);
else
berechnungen.BGvalue(berechnungen.BGarray,SimuLoop,0);
}
if(SimuLoop >=160)
mealtime=berechnungen.mealtime(300);
else
{
if(SimuLoop >= 105){
mealtime=berechnungen.mealtime(170);
Abendessen=(int) mealtime;
}
else{
mealtime=berechnungen.mealtime(110);
Mittagessen=(int) mealtime;
}
}
}
else{
if(Delay==0)
berechnungen.BGvalue(berechnungen.BGarray,SimuLoop,0);
else{
if(SimuLoop>=2)
berechnungen.BGvalue(berechnungen.BGarray,SimuLoop,2);
else{
berechnungen.BGvalue(berechnungen.BGarray,SimuLoop,0);
System.out.println("Delay geht!");
}
}
}
berechnungen.BolusIU(bedienfeld,SimuLoop);
if(bedienfeld.Unit==1)
bedienfeld.BGschreiben(""+Math.round(berechnungen.BGvalue[SimuLoop]));
else{
//Runden auf 2 Stellen nach dem Komma
double ZR2=Math.round(100*berechnungen.BGvalue[SimuLoop]/20);
double ER= ZR2/100;
bedienfeld.BGschreiben(""+ER);
}
// Runden auf 1 Stelle nach dem Komma
double IUTemp=Math.round((450-(double)bedienfeld.Scrollbar())/45*10);
double IUschreib = IUTemp/10;
bedienfeld.IUschreiben(""+ IUschreib);
berechnungen.GraphValue[SimuLoop]=(SinNachUnten + FeldgrösseY-(FeldgrösseY/300 * berechnungen.BGvalue[SimuLoop]));
repaint();
SimuLoop++;
}
}
}
public void paint(Graphics g){
int i=1;
int morgen=0;
int mittag=0;
int abend=0;
int schritt = FeldgrösseX/240;
this.isDoubleBuffered();
g.setColor(Color.WHITE);
if (init++==0 | bedienfeld.FeldNeuZeichnen==1){
bedienfeld.FeldNeuZeichnen(0);
bedienfeld.BolusAuswahl=0;
BildAusgegeben=0;
Feld.paint(g);
System.out.println("in der verzweigung init++ = 0");
}
g.setColor(Color.red);
g.setClip(lira,obra,FeldgrösseX,FeldgrösseY);
for(;berechnungen.BGvalue[i]!=0 && i<=240 ;i++){
g.drawLine(lira+schritt*i,(int)(obra+FeldgrösseY-berechnungen.BGvalue[i-1]),lira+schritt*(i+1),(int)(obra+FeldgrösseY-berechnungen.BGvalue[i]));
if (i>=Morgenessen && morgen==0){
morgen=i;
}
if (morgen>0 && bedienfeld.EssenZeigen()==1){
g.setColor(Color.green);
g.drawLine(lira+(morgen)*schritt,FeldgrösseY+obra-2,
lira+(morgen+1)*schritt,(int) (obra+FeldgrösseY-berechnungen.WievielMorgenessen));
g.drawLine(lira+(morgen+1)*schritt,(int) (FeldgrösseY+obra-berechnungen.WievielMorgenessen),
lira+(morgen+2)*schritt,FeldgrösseY+obra-2);
g.setColor(Color.red);
}
if (i>=Mittagessen && mittag==0){
mittag=i;
}
if (mittag>0 && bedienfeld.EssenZeigen()==1){
g.setColor(Color.green);
g.drawLine(lira+(mittag)*schritt,FeldgrösseY+obra-2,
lira+(mittag+1)*schritt,(int) (obra+FeldgrösseY-berechnungen.WievielMittagessen));
g.drawLine(lira+(mittag+1)*schritt,(int) (FeldgrösseY+obra-berechnungen.WievielMittagessen),
lira+(mittag+2)*schritt,FeldgrösseY+obra-2);
g.setColor(Color.red);
}
if (i>=Abendessen && abend==0){
abend=i;
}
if (abend>0 && bedienfeld.EssenZeigen()==1){
g.setColor(Color.green);
g.drawLine(lira+(abend)*schritt,FeldgrösseY+obra-2,
lira+(abend+1)*schritt,(int) (obra+FeldgrösseY-berechnungen.WievielAbendessen));
g.drawLine(lira+(abend+1)*schritt,(int) (FeldgrösseY+obra-berechnungen.WievielAbendessen),
lira+(abend+2)*schritt,FeldgrösseY+obra-2);
g.setColor(Color.red);
}
double BG=berechnungen.BGvalue[i];
if(i>2){
if((BG > 30 && BG < 50 || BG > 150 && BG < 600) && NeuesBild==0)
NeuesBild=2;
if(BG<30 || BG>600)
NeuesBild=3;
if(i>=240 && NeuesBild==0)
NeuesBild=1;
}
}
//g.setClip(lira+FeldgrösseX/2-70,390,140,140);
g.setClip(lira+FeldgrösseX+30,300,140,140);
if( NeuesBild==0 && i<1){
Feld.BildLöschen=1;
Feld.paint(getGraphics());
}
else if(NeuesBild==1 && i>4){
g.drawImage(img_pokal,lira+FeldgrösseX+30,300,140,140,this);
status.statusAusgeben("Congratulations");
}
else if(NeuesBild==2 && i>4 && BildAusgegeben==0){
g.drawImage(img_doc,lira+FeldgrösseX+30,300,140,140,this);
status.statusAusgeben("Please call your doc! You need help");
BildAusgegeben++;
}
else if(NeuesBild==3 && i>4 && BildAusgegeben==1){
g.drawImage(img_rip,lira+FeldgrösseX+30,300,140,140,this);
status.statusAusgeben("Sorry,you're dead!");
BildAusgegeben++;
}
/*rootPane.setVisible(true);
getContentPane().setVisible(true);
this.setVisible(true);
setVisible(true);*/
}
public void stop(){
stopThread=true;
thread=null;
init=0;
System.out.println("in stop");
//setVisible(true);
}
public void destroy(){
}
public void esseninit(){
Glucose=berechnungen.randomGlucose();
//Essenszeiten speichern
Morgenessen=berechnungen.mealtime(60);
Mittagessen=berechnungen.mealtime(110);
Abendessen=berechnungen.mealtime(170);
mealtime=Morgenessen;
}
}