/*
	Trivial applet that displays a string - 4/96 PNL
*/

import java.awt.*;
import java.applet.Applet;

class Cross extends Start {
	Start cross;
	Fly One, Two;
	static int x = 1, y = 25;
	static int verticalDist = 150;
	int width = 110;
	
	int 	F_Red_Vest_Ebony, F_Red_Wing_Ebony, M_Red_Vest_Ebony, M_Red_Wing_Ebony,
					F_Red_Vest_Albino, F_Sepia_Vest_Albino, M_Red_Vest_Albino, M_Sepia_Vest_Albino,
					F_White_Wing_Albino, M_White_Wing_Albino, F_Red_Wing_Albino, F_Sepia_Wing_Albino,
					M_Red_Wing_Albino, M_Sepia_Wing_Albino;
		
	int population = 5;
	int totalCount;
	String theF1Cross[][] = new String[population][population];
	String theF2Cross[][] = new String[population][population];
	
	
	public Cross(Fly one, Fly two) {
	
		One = one;
		Two = two;
		mate(One, Two, theF1Cross);
		count(theF1Cross);
	}

	public void paint(Graphics g) {
		
		if( F_Red_Wing_Albino > 0) {
			g.drawImage(F_Red_Wing_AlbinoGif, x, y, this);
			g.drawString("count " + F_Red_Wing_Albino, x, verticalDist);
			adjust();
			}
		if( M_Red_Wing_Albino > 0) {
			g.drawImage(M_Red_Wing_AlbinoGif, x, y, this);
			g.drawString("count " + M_Red_Wing_Albino, x, verticalDist);
			adjust();
			}	  
		if( F_Sepia_Wing_Albino > 0) {
			g.drawImage(F_Sepia_Wing_AlbinoGif, x, y, this);
			g.drawString("count " + F_Sepia_Wing_Albino, x, verticalDist);
			adjust();
			}  
		if( M_Sepia_Wing_Albino > 0) {
			g.drawImage(M_Sepia_Wing_AlbinoGif, x, y, this);
			g.drawString("count " + M_Sepia_Wing_Albino, x, verticalDist);
			adjust();
			}
		if( F_Red_Vest_Albino > 0) {
			g.drawImage(F_Red_Vest_AlbinoGif, x, y, this);
			g.drawString("count " + F_Red_Vest_Albino, x, verticalDist);
			adjust();
			} 
		if( M_Red_Vest_Albino > 0) {
			g.drawImage(M_Red_Vest_AlbinoGif, x, y, this);
			g.drawString("count " + M_Red_Vest_Albino, x, verticalDist);
			adjust();
			}  	 
		if( F_Sepia_Vest_Albino > 0) {
			g.drawImage(F_Sepia_Vest_AlbinoGif, x, y, this);
			g.drawString("count " + F_Sepia_Vest_Albino, x, verticalDist);
			adjust();
			}  
		if( M_Sepia_Vest_Albino > 0) {
			g.drawImage(M_Sepia_Vest_AlbinoGif, x, y, this);
			g.drawString("count " + M_Sepia_Vest_Albino, x, verticalDist);
			adjust();
			}
		if( F_Red_Wing_Ebony > 0) {
			g.drawImage(F_Red_Wing_EbonyGif, x, y, this);
			g.drawString("count " + F_Red_Wing_Ebony, x, verticalDist);
			adjust();
			}  
		  
		if( M_Red_Wing_Ebony > 0) {
			g.drawImage(M_Red_Wing_EbonyGif, x, y, this);
			g.drawString("count " + M_Red_Wing_Ebony, x, verticalDist);
			adjust();
			} 	
		if( F_Red_Vest_Ebony > 0) {
			g.drawImage(F_Red_Vest_EbonyGif, x, y, this);
			g.drawString("count " + F_Red_Vest_Ebony, x, verticalDist);
			adjust();
			} 
		if( M_Red_Vest_Ebony > 0) {
			g.drawImage(M_Red_Vest_EbonyGif, x, y, this);
			g.drawString("count " + M_Red_Vest_Ebony, x, verticalDist);
			adjust();
			}	
		if( F_White_Wing_Albino > 0) {
			g.drawImage(F_White_Wing_AlbinoGif, x, y, this);
			g.drawString("count " + F_White_Wing_Albino, x, verticalDist);
			adjust();
			}  
		if( M_White_Wing_Albino > 0) {
			g.drawImage(M_White_Wing_AlbinoGif, x, y, this);
			g.drawString("count " + M_White_Wing_Albino, x, verticalDist);
			adjust();
			}  
			validate();
			repaint();
			repaint();
		}	
		public void adjust() {
			if (x > 300) {
				y+= 175;
				x = 1;
				verticalDist += 175;
				}
			else
				x+= width;
		
		}
	public void mate(Fly one, Fly two, String theCross[][]) {
		
		char 	sexTypeOneP1;
		char 	T1A, T1B, T2A, T2B, T3A, T3B;
		int 	sexTypeTwoP1, 
				eyeTypeOneP1, 	eyeTypeTwoP1, 
				wingTypeOneP1, wingTypeTwoP1, 
				bodyTypeOneP1, bodyTypeTwoP1;
		
		char sex2 = 'o';
		
		for (int row = 0; row < population; row++) {
			for(int column = 0; column < population; column++) {
				sexTypeOneP1 = 'X';								//must be X
				sexTypeTwoP1 = (int)(Math.random() * 2);	
				//choose eye random
				eyeTypeOneP1 = (int)(Math.random() * 2);
				eyeTypeTwoP1 = (int)(Math.random() * 2);
				wingTypeOneP1 = (int)(Math.random() * 2);
				wingTypeTwoP1 = (int)(Math.random() * 2);
				bodyTypeOneP1 = (int)(Math.random() * 2);
				bodyTypeTwoP1 = (int)(Math.random() * 2);
				
				if (sexTypeTwoP1 == 0)
					sex2 = 'X';
				else if(sexTypeTwoP1 == 1)
					sex2 = 'Y';
				
				//make sure that the Dominant allheles is first
				if (one.allheles[1][eyeTypeOneP1] > two.allheles[1][eyeTypeTwoP1]) {
					T1B = one.allheles[1][eyeTypeOneP1];
					T1A = two.allheles[1][eyeTypeTwoP1];
				}
				else {
					T1A = one.allheles[1][eyeTypeOneP1];
					T1B = two.allheles[1][eyeTypeTwoP1];
					}
				if (one.allheles[2][wingTypeOneP1] > two.allheles[2][wingTypeTwoP1]) {
					T2B = one.allheles[2][wingTypeOneP1];
					T2A = two.allheles[2][wingTypeTwoP1];
				}
				else {
					T2A = one.allheles[2][wingTypeOneP1];
					T2B = two.allheles[2][wingTypeTwoP1];
					}
				if (one.allheles[3][bodyTypeOneP1] > two.allheles[3][bodyTypeTwoP1]) {
					T3B = one.allheles[3][bodyTypeOneP1];
					T3A = two.allheles[3][bodyTypeTwoP1];
				}
				else {
					T3A = one.allheles[3][bodyTypeOneP1];
					T3B = two.allheles[3][bodyTypeTwoP1];
					}		
				theCross[row][column] = (""+ 'X' + sex2 + T1A + T1B
																	 + T2A + T2B
																	 + T3A + T3B);	
				
			}
		}
	}
	
	public void count(String theCrossToCount[][]) {
		for (int row = 0; row < population; row++) {
			for(int column = 0; column < population; column++) {
				//cross.showStatus("test");
				if (theCrossToCount[row][column].equals("XXRRwwbb") | theCrossToCount[row][column].equals("XXRrwwbb"))
					F_Red_Vest_Ebony++;
				else if (theCrossToCount[row][column].equals("XXRRWWbb")| theCrossToCount[row][column].equals("XXRrWWbb")|
							theCrossToCount[row][column].equals("XXRRWwbb")| theCrossToCount[row][column].equals("XXRrWwbb"))
					F_Red_Wing_Ebony++;
				else if (theCrossToCount[row][column].equals("XYRRwwbb")| theCrossToCount[row][column].equals("XYRrwwbb"))
					M_Red_Vest_Ebony++;
				else if (theCrossToCount[row][column].equals("XYRRWWbb")| theCrossToCount[row][column].equals("XYRrWWbb")|
							theCrossToCount[row][column].equals("XYRRWwbb")| theCrossToCount[row][column].equals("XYRrWwbb"))
					M_Red_Wing_Ebony++;
				else if (theCrossToCount[row][column].equals("XXRRwwBB")| theCrossToCount[row][column].equals("XXRrwwBB")|
							theCrossToCount[row][column].equals("XXRRwwBb")| theCrossToCount[row][column].equals("XXRrwwBb"))
					F_Red_Vest_Albino++;
				else if (theCrossToCount[row][column].equals("XXrrwwbb")| theCrossToCount[row][column].equals("XXrrwwBb"))
					F_Sepia_Vest_Albino++;
				else if (theCrossToCount[row][column].equals("XYRRwwBB")| theCrossToCount[row][column].equals("XYRrwwBB")|
							theCrossToCount[row][column].equals("XYRRwwBb")| theCrossToCount[row][column].equals("XYRrwwBb"))
					M_Red_Vest_Albino++;
				else if (theCrossToCount[row][column].equals("XYrrwwBB")| theCrossToCount[row][column].equals("XYrrwwBb"))
					M_Sepia_Vest_Albino++;
				else if (theCrossToCount[row][column].equals("XXssWWBB")| theCrossToCount[row][column].equals("XXssWwBb"))
					F_White_Wing_Albino++;
				else if (theCrossToCount[row][column].equals("XYssWWBB")| theCrossToCount[row][column].equals("XYssWwBb"))
					M_White_Wing_Albino++;
				else if (theCrossToCount[row][column].equals("XXRRWWBB") | theCrossToCount[row][column].equals("XXRrWWBB") |
							theCrossToCount[row][column].equals("XXRRWwBB")| theCrossToCount[row][column].equals("XXRrWwBB")|
							theCrossToCount[row][column].equals("XXRRWWBb")| theCrossToCount[row][column].equals("XXRrWWBb")|
							theCrossToCount[row][column].equals("XXRRWwBb")| theCrossToCount[row][column].equals("XXRrWwBb")|
							theCrossToCount[row][column].equals("XXRsWWBB")| theCrossToCount[row][column].equals("XXRsWwBB")|
							theCrossToCount[row][column].equals("XXRsWWBb")| theCrossToCount[row][column].equals("XXRsWwBb"))
					F_Red_Wing_Albino++;
				else if (theCrossToCount[row][column].equals("XXrrWWBB")| theCrossToCount[row][column].equals("XXrrWwBB")|
							theCrossToCount[row][column].equals("XXrrWWBb")| theCrossToCount[row][column].equals("XXrrWwBb"))
					F_Sepia_Wing_Albino++;
				else if (theCrossToCount[row][column].equals("XYRRWWBB")| theCrossToCount[row][column].equals("XYRrWWBB") |
							theCrossToCount[row][column].equals("XYRRWwBB")| theCrossToCount[row][column].equals("XYRrWwBB")|
							theCrossToCount[row][column].equals("XYRRWWBb")| theCrossToCount[row][column].equals("XYRrWWBb")|
							theCrossToCount[row][column].equals("XYRRWwBb")| theCrossToCount[row][column].equals("XYRrWwBb")|
							theCrossToCount[row][column].equals("XYRsWWBB")| theCrossToCount[row][column].equals("XYRsWwBB")|
							theCrossToCount[row][column].equals("XYRsWWBb")| theCrossToCount[row][column].equals("XYRsWwBb"))
					M_Red_Wing_Albino++;
				else if (theCrossToCount[row][column].equals("XYrrWWBB")| theCrossToCount[row][column].equals("XYrrWwBB")|
							theCrossToCount[row][column].equals("XYrrWWBb")| theCrossToCount[row][column].equals("XYrrWwBb"))
					M_Sepia_Wing_Albino++;
				totalCount++;	
			}
		}	
	}
}