mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	* Improve Turing sample * Move more complex sample to different file * Undo changes to original file
		
			
				
	
	
		
			663 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Turing
		
	
	
	
	
	
			
		
		
	
	
			663 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Turing
		
	
	
	
	
	
| %This is a comment
 | |
| var x : array 0 .. 100 of int 
 | |
| var rangeX, rangeY, loopFor : int := 0
 | |
| setscreen ("graphics:696;400,nobuttonbar")
 | |
| setscreen ("nocursor")
 | |
| setscreen ("noecho")
 | |
| var colourP : string := "Yellow"
 | |
| var title : int := Font.New ("Algerian:60")
 | |
| var subtitle : int := Font.New ("Algerian:20")
 | |
| var xValue, yValue, font1, font2, instructionsTitle : int
 | |
| var scoreR, scoreY, button : int := 0
 | |
| var scoreRS, scoreYS, PreventFor : string
 | |
| var win : string := "N"
 | |
| var full, samePlayer : boolean := false
 | |
| font1 := Font.New ("Algerian:20")
 | |
| font2 := Font.New ("TimesNewRoman:15")
 | |
| instructionsTitle := Font.New ("Algerian:35")
 | |
| var shouldPlay : boolean := true
 | |
| forward proc game
 | |
| for i : 0 .. 100  
 | |
|     x (i) := 0
 | |
| end for
 | |
| proc pauseProgram
 | |
|     var reply : string (1)
 | |
|     getch (reply)
 | |
| end pauseProgram
 | |
| process backgroundMusic
 | |
|     loop
 | |
| 	exit when shouldPlay = false
 | |
| 	Music.PlayFile ("music.MP3")
 | |
|     end loop
 | |
| end backgroundMusic
 | |
| proc winner
 | |
|     cls
 | |
|     win := "N"
 | |
|     for i : 1 .. 100
 | |
| 	x (i) := 0
 | |
|     end for
 | |
|     drawfillbox (0, 0, 696, 400, black)
 | |
|     scoreRS := "Red Wins: " + intstr (scoreR)
 | |
|     scoreYS := "Yellow Wins: " + intstr (scoreY)
 | |
|     Font.Draw ("", 190, 320, title, 48)
 | |
|     Font.Draw (scoreRS, 0, 250, font1, 52)
 | |
|     Font.Draw (scoreYS, 0, 220, font1, 52)
 | |
|     Font.Draw ("Press any Key to continue.", 180, 100, subtitle, 12)
 | |
|     pauseProgram
 | |
|     game
 | |
| end winner
 | |
| body proc game
 | |
|     for i : 1 .. 100
 | |
| 	x (i) := 0
 | |
|     end for
 | |
|     cls
 | |
|     drawfillbox (0, 0, 700, 400, black)%Grid
 | |
|     Draw.ThickLine (0, 400, 0, 0, 5, 48)
 | |
|     Draw.ThickLine (696, 400, 696, 0, 5, 48)
 | |
|     Draw.ThickLine (3, 0, 696, 0, 5, 48)
 | |
|     Draw.ThickLine (696, 0, 696, 70, 5, 48)
 | |
|     Draw.ThickLine (610, 70, 87, 70, 5, 48)
 | |
|     Draw.ThickLine (87, 70, 87, 400, 5, 48)
 | |
|     Draw.ThickLine (87, 400, 0, 400, 5, 48)
 | |
|     Draw.ThickLine (173, 70, 173, 400, 5, 48)
 | |
|     Draw.ThickLine (260, 70, 260, 400, 5, 48)
 | |
|     Draw.ThickLine (347, 70, 347, 400, 5, 48)
 | |
|     Draw.ThickLine (435, 70, 435, 400, 5, 48)
 | |
|     Draw.ThickLine (521, 70, 521, 400, 5, 48)
 | |
|     Draw.ThickLine (609, 70, 609, 400, 5, 48)
 | |
|     Draw.ThickLine (0, 70, 87, 70, 2, 11) %NEW!
 | |
|     Draw.ThickLine (0, 120, 87, 120, 2, 11)
 | |
|     Draw.ThickLine (0, 170, 87, 170, 2, 11)
 | |
|     Draw.ThickLine (0, 220, 87, 220, 2, 11)
 | |
|     Draw.ThickLine (0, 270, 87, 270, 2, 11)
 | |
|     Draw.ThickLine (0, 320, 87, 320, 2, 11)
 | |
|     Draw.ThickLine (0, 370, 87, 370, 2, 11)
 | |
|     Draw.ThickLine (609, 70, 696, 70, 2, 11) %Part 2
 | |
|     Draw.ThickLine (609, 120, 696, 120, 2, 11)
 | |
|     Draw.ThickLine (609, 170, 696, 170, 2, 11)
 | |
|     Draw.ThickLine (609, 220, 696, 220, 2, 11)
 | |
|     Draw.ThickLine (609, 270, 696, 270, 2, 11)
 | |
|     Draw.ThickLine (609, 320, 696, 320, 2, 11)
 | |
|     Draw.ThickLine (609, 370, 696, 370, 2, 11)
 | |
|     loop
 | |
| 	if colourP = "Yellow" then
 | |
| 	    if button = 1 then
 | |
| 		if (rangeX >= 87 and rangeX <= 173) then
 | |
| 		    %Drop on right corner (now verifies height)
 | |
| 		    if x (1) = 0 then
 | |
| 			x (1) := 1
 | |
| 			loopFor := 300
 | |
| 		    elsif x (2) = 0 then
 | |
| 			x (2) := 1
 | |
| 			loopFor := 250
 | |
| 		    elsif x (3) = 0 then
 | |
| 			x (3) := 1
 | |
| 			loopFor := 200
 | |
| 		    elsif x (4) = 0 then
 | |
| 			x (4) := 1
 | |
| 			loopFor := 150
 | |
| 		    elsif x (5) = 0 then
 | |
| 			x (5) := 1
 | |
| 			loopFor := 100
 | |
| 		    elsif x (6) = 0 then
 | |
| 			x (6) := 1
 | |
| 			loopFor := 50
 | |
| 		    else
 | |
| 			full := true
 | |
| 			samePlayer := true
 | |
| 		    end if
 | |
| 		    if full = true then
 | |
| 			full := false
 | |
| 		    else
 | |
| 			for i : 1 .. loopFor
 | |
| 			    drawfilloval (135, 401 - i, 25, 25, black)
 | |
| 			    drawfilloval (135, 400 - i, 25, 25, yellow)
 | |
| 			    delay (1)
 | |
| 			end for
 | |
| 		    end if
 | |
| 		elsif (rangeX >= 174 and rangeX <= 260) then
 | |
| 		    if x (7) = 0 then %Drop on right corner (now verifies height)
 | |
| 			x (7) := 1
 | |
| 			loopFor := 300
 | |
| 		    elsif x (8) = 0 then
 | |
| 			x (8) := 1
 | |
| 			loopFor := 250
 | |
| 		    elsif x (9) = 0 then
 | |
| 			x (9) := 1
 | |
| 			loopFor := 200
 | |
| 		    elsif x (10) = 0 then
 | |
| 			x (10) := 1
 | |
| 			loopFor := 150
 | |
| 		    elsif x (11) = 0 then
 | |
| 			x (11) := 1
 | |
| 			loopFor := 100
 | |
| 		    elsif x (12) = 0 then
 | |
| 			x (12) := 1
 | |
| 			loopFor := 50
 | |
| 		    else
 | |
| 			full := true
 | |
| 			samePlayer := true
 | |
| 		    end if
 | |
| 		    if full = true then
 | |
| 			full := false
 | |
| 		    else
 | |
| 			for i : 1 .. loopFor
 | |
| 			    drawfilloval (222, 401 - i, 25, 25, black)
 | |
| 			    drawfilloval (222, 400 - i, 25, 25, yellow)
 | |
| 			    delay (1)
 | |
| 			end for
 | |
| 		    end if
 | |
| 		elsif (rangeX >= 261 and rangeX <= 347) then
 | |
| 		    if x (13) = 0 then%Drop on right corner (now verifies height)
 | |
| 			x (13) := 1
 | |
| 			loopFor := 300
 | |
| 		    elsif x (14) = 0 then
 | |
| 			x (14) := 1
 | |
| 			loopFor := 250
 | |
| 		    elsif x (15) = 0 then
 | |
| 			x (15) := 1
 | |
| 			loopFor := 200
 | |
| 		    elsif x (16) = 0 then
 | |
| 			x (16) := 1
 | |
| 			loopFor := 150
 | |
| 		    elsif x (17) = 0 then
 | |
| 			x (17) := 1
 | |
| 			loopFor := 100
 | |
| 		    elsif x (18) = 0 then
 | |
| 			x (18) := 1
 | |
| 			loopFor := 50
 | |
| 		    else
 | |
| 			full := true
 | |
| 		    end if
 | |
| 		    if full = true then
 | |
| 			full := false
 | |
| 			samePlayer := true
 | |
| 		    else
 | |
| 			for i : 1 .. loopFor
 | |
| 			    drawfilloval (309, 401 - i, 25, 25, black)
 | |
| 			    drawfilloval (309, 400 - i, 25, 25, yellow)
 | |
| 			    delay (1)
 | |
| 			end for
 | |
| 		    end if
 | |
| 		elsif (rangeX >= 348 and rangeX <= 434) then
 | |
| 		    if x (19) = 0 then %Drop on right corner (now verifies height)
 | |
| 			x (19) := 1
 | |
| 			loopFor := 300
 | |
| 		    elsif x (20) = 0 then
 | |
| 			x (20) := 1
 | |
| 			loopFor := 250
 | |
| 		    elsif x (21) = 0 then
 | |
| 			x (21) := 1
 | |
| 			loopFor := 200
 | |
| 		    elsif x (22) = 0 then
 | |
| 			x (22) := 1
 | |
| 			loopFor := 150
 | |
| 		    elsif x (23) = 0 then
 | |
| 			x (23) := 1
 | |
| 			loopFor := 100
 | |
| 		    elsif x (24) = 0 then
 | |
| 			x (24) := 1
 | |
| 			loopFor := 50
 | |
| 		    else
 | |
| 			full := true
 | |
| 			samePlayer := true
 | |
| 		    end if
 | |
| 		    if full = true then
 | |
| 			full := false
 | |
| 		    else
 | |
| 			for i : 1 .. loopFor
 | |
| 			    drawfilloval (396, 401 - i, 25, 25, black)
 | |
| 			    drawfilloval (396, 400 - i, 25, 25, yellow)
 | |
| 			    delay (1)
 | |
| 			end for
 | |
| 		    end if
 | |
| 		elsif (rangeX >= 435 and rangeX <= 521) then
 | |
| 		    if x (25) = 0 then %Drop on right corner (now verifies height)
 | |
| 			x (25) := 1
 | |
| 			loopFor := 300
 | |
| 		    elsif x (26) = 0 then
 | |
| 			x (26) := 1
 | |
| 			loopFor := 250
 | |
| 		    elsif x (27) = 0 then
 | |
| 			x (27) := 1
 | |
| 			loopFor := 200
 | |
| 		    elsif x (28) = 0 then
 | |
| 			x (28) := 1
 | |
| 			loopFor := 150
 | |
| 		    elsif x (29) = 0 then
 | |
| 			x (29) := 1
 | |
| 			loopFor := 100
 | |
| 		    elsif x (30) = 0 then
 | |
| 			x (30) := 1
 | |
| 			loopFor := 50
 | |
| 		    else
 | |
| 			full := true
 | |
| 			samePlayer := true
 | |
| 		    end if
 | |
| 		    if full = true then
 | |
| 			full := false
 | |
| 		    else
 | |
| 			for i : 1 .. loopFor
 | |
| 			    drawfilloval (483, 401 - i, 25, 25, black)
 | |
| 			    drawfilloval (483, 400 - i, 25, 25, yellow)
 | |
| 			    delay (1)
 | |
| 			end for
 | |
| 		    end if
 | |
| 		elsif (rangeX >= 522 and rangeX <= 609) then
 | |
| 		    if x (31) = 0 then %Drop on right corner (now verifies height)
 | |
| 			x (31) := 1
 | |
| 			loopFor := 300
 | |
| 		    elsif x (32) = 0 then
 | |
| 			x (32) := 1
 | |
| 			loopFor := 250
 | |
| 		    elsif x (33) = 0 then
 | |
| 			x (33) := 1
 | |
| 			loopFor := 200
 | |
| 		    elsif x (34) = 0 then
 | |
| 			x (34) := 1
 | |
| 			loopFor := 150
 | |
| 		    elsif x (35) = 0 then
 | |
| 			x (35) := 1
 | |
| 			loopFor := 100
 | |
| 		    elsif x (36) = 0 then
 | |
| 			x (36) := 1
 | |
| 			loopFor := 50
 | |
| 		    else
 | |
| 			full := true
 | |
| 			samePlayer := true
 | |
| 		    end if
 | |
| 		    if full = true then
 | |
| 			full := false
 | |
| 		    else
 | |
| 			for i : 1 .. loopFor
 | |
| 			    drawfilloval (570, 401 - i, 25, 25, black)
 | |
| 			    drawfilloval (570, 400 - i, 25, 25, yellow)
 | |
| 			    delay (1)
 | |
| 			end for
 | |
| 		    end if
 | |
| 		end if
 | |
| 		if samePlayer = true then
 | |
| 		    samePlayer := false
 | |
| 		else
 | |
| 		    colourP := "Red"
 | |
| 		end if
 | |
| 	    end if
 | |
| 	else
 | |
| 	    if button = 1 then
 | |
| 		if (rangeX >= 87 and rangeX <= 173) then
 | |
| 		    if x (1) = 0 then %Drop on right corner (now verifies height)
 | |
| 			x (1) := 2
 | |
| 			loopFor := 300
 | |
| 		    elsif x (2) = 0 then
 | |
| 			x (2) := 2
 | |
| 			loopFor := 250
 | |
| 		    elsif x (3) = 0 then
 | |
| 			x (3) := 2
 | |
| 			loopFor := 200
 | |
| 		    elsif x (4) = 0 then
 | |
| 			x (4) := 2
 | |
| 			loopFor := 150
 | |
| 		    elsif x (5) = 0 then
 | |
| 			x (5) := 2
 | |
| 			loopFor := 100
 | |
| 		    elsif x (6) = 0 then
 | |
| 			x (6) := 2
 | |
| 			loopFor := 50
 | |
| 		    else
 | |
| 			full := true
 | |
| 			samePlayer := true
 | |
| 		    end if
 | |
| 		    if full = true then
 | |
| 			full := false
 | |
| 		    else
 | |
| 			for i : 1 .. loopFor
 | |
| 			    drawfilloval (135, 401 - i, 25, 25, black)
 | |
| 			    drawfilloval (135, 400 - i, 25, 25, 12)
 | |
| 			    delay (1)
 | |
| 			end for
 | |
| 		    end if
 | |
| 		elsif (rangeX >= 174 and rangeX <= 260) then
 | |
| 		    if x (7) = 0 then %Drop on right corner (now verifies height)
 | |
| 			x (7) := 2
 | |
| 			loopFor := 300
 | |
| 		    elsif x (8) = 0 then
 | |
| 			x (8) := 2
 | |
| 			loopFor := 250
 | |
| 		    elsif x (9) = 0 then
 | |
| 			x (9) := 2
 | |
| 			loopFor := 200
 | |
| 		    elsif x (10) = 0 then
 | |
| 			x (10) := 2
 | |
| 			loopFor := 150
 | |
| 		    elsif x (11) = 0 then
 | |
| 			x (11) := 2
 | |
| 			loopFor := 100
 | |
| 		    elsif x (12) = 0 then
 | |
| 			x (12) := 2
 | |
| 			loopFor := 50
 | |
| 		    else
 | |
| 			full := true
 | |
| 			samePlayer := true
 | |
| 		    end if
 | |
| 		    if full = true then
 | |
| 			full := false
 | |
| 		    else
 | |
| 			for i : 1 .. loopFor
 | |
| 			    drawfilloval (222, 401 - i, 25, 25, black)
 | |
| 			    drawfilloval (222, 400 - i, 25, 25, 12)
 | |
| 			    delay (1)
 | |
| 			end for
 | |
| 		    end if
 | |
| 		elsif (rangeX >= 261 and rangeX <= 347) then
 | |
| 		    if x (13) = 0 then %Drop on right corner (now verifies height)
 | |
| 			x (13) := 2
 | |
| 			loopFor := 300
 | |
| 		    elsif x (14) = 0 then
 | |
| 			x (14) := 2
 | |
| 			loopFor := 250
 | |
| 		    elsif x (15) = 0 then
 | |
| 			x (15) := 2
 | |
| 			loopFor := 200
 | |
| 		    elsif x (16) = 0 then
 | |
| 			x (16) := 2
 | |
| 			loopFor := 150
 | |
| 		    elsif x (17) = 0 then
 | |
| 			x (17) := 2
 | |
| 			loopFor := 100
 | |
| 		    elsif x (18) = 0 then
 | |
| 			x (18) := 2
 | |
| 			loopFor := 50
 | |
| 		    else
 | |
| 			full := true
 | |
| 			samePlayer := true
 | |
| 		    end if
 | |
| 		    if full = true then
 | |
| 			samePlayer := true
 | |
| 		    else
 | |
| 			for i : 1 .. loopFor
 | |
| 			    drawfilloval (309, 401 - i, 25, 25, black)
 | |
| 			    drawfilloval (309, 400 - i, 25, 25, 12)
 | |
| 			    delay (1)
 | |
| 			end for
 | |
| 		    end if
 | |
| 		elsif (rangeX >= 348 and rangeX <= 434) then
 | |
| 		    %Drop on right corner (now verifies height)
 | |
| 		    if x (19) = 0 then
 | |
| 			x (19) := 2
 | |
| 			loopFor := 300
 | |
| 		    elsif x (20) = 0 then
 | |
| 			x (20) := 2
 | |
| 			loopFor := 250
 | |
| 		    elsif x (21) = 0 then
 | |
| 			x (21) := 2
 | |
| 			loopFor := 200
 | |
| 		    elsif x (22) = 0 then
 | |
| 			x (22) := 2
 | |
| 			loopFor := 150
 | |
| 		    elsif x (23) = 0 then
 | |
| 			x (23) := 2
 | |
| 			loopFor := 100
 | |
| 		    elsif x (24) = 0 then
 | |
| 			x (24) := 2
 | |
| 			loopFor := 50
 | |
| 		    else
 | |
| 			full := true
 | |
| 			samePlayer := true
 | |
| 		    end if
 | |
| 		    if full = true then
 | |
| 			full := false
 | |
| 		    else
 | |
| 			for i : 1 .. loopFor
 | |
| 			    drawfilloval (396, 401 - i, 25, 25, black)
 | |
| 			    drawfilloval (396, 400 - i, 25, 25, 12)
 | |
| 			    delay (1)
 | |
| 			end for
 | |
| 		    end if
 | |
| 		elsif (rangeX >= 435 and rangeX <= 521) then
 | |
| 		    %Drop on right corner (now verifies height)
 | |
| 		    if x (25) = 0 then
 | |
| 			x (25) := 2
 | |
| 			loopFor := 300
 | |
| 		    elsif x (26) = 0 then
 | |
| 			x (26) := 2
 | |
| 			loopFor := 250
 | |
| 		    elsif x (27) = 0 then
 | |
| 			x (27) := 2
 | |
| 			loopFor := 200
 | |
| 		    elsif x (28) = 0 then
 | |
| 			x (28) := 2
 | |
| 			loopFor := 150
 | |
| 		    elsif x (29) = 0 then
 | |
| 			x (29) := 2
 | |
| 			loopFor := 100
 | |
| 		    elsif x (30) = 0 then
 | |
| 			x (30) := 2
 | |
| 			loopFor := 50
 | |
| 		    else
 | |
| 			full := true
 | |
| 			samePlayer := true
 | |
| 		    end if
 | |
| 		    if full = true then
 | |
| 			full := false
 | |
| 		    else
 | |
| 			for i : 1 .. loopFor
 | |
| 			    drawfilloval (483, 401 - i, 25, 25, black)
 | |
| 			    drawfilloval (483, 400 - i, 25, 25, 12)
 | |
| 			    delay (1)
 | |
| 			end for
 | |
| 		    end if
 | |
| 		elsif (rangeX >= 522 and rangeX <= 609) then
 | |
| 		    %Drop on right corner (now verifies height)
 | |
| 		    if x (31) = 0 then
 | |
| 			x (31) := 2
 | |
| 			loopFor := 300
 | |
| 		    elsif x (32) = 0 then
 | |
| 			x (32) := 2
 | |
| 			loopFor := 250
 | |
| 		    elsif x (33) = 0 then
 | |
| 			x (33) := 2
 | |
| 			loopFor := 200
 | |
| 		    elsif x (34) = 0 then
 | |
| 			x (34) := 2
 | |
| 			loopFor := 150
 | |
| 		    elsif x (35) = 0 then
 | |
| 			x (35) := 2
 | |
| 			loopFor := 100
 | |
| 		    elsif x (36) = 0 then
 | |
| 			x (36) := 2
 | |
| 			loopFor := 50
 | |
| 		    else
 | |
| 			full := true
 | |
| 			samePlayer := true
 | |
| 		    end if
 | |
| 		    if full = true then
 | |
| 			full := false
 | |
| 		    else
 | |
| 			for i : 1 .. loopFor
 | |
| 			    drawfilloval (570, 401 - i, 25, 25, black)
 | |
| 			    drawfilloval (570, 400 - i, 25, 25, 12)
 | |
| 			    delay (1)
 | |
| 			end for
 | |
| 		    end if
 | |
| 		end if
 | |
| 		if samePlayer then
 | |
| 		    samePlayer := false
 | |
| 		else
 | |
| 		    colourP := "Yellow"
 | |
| 		end if
 | |
| 
 | |
| 	    end if
 | |
| 	end if
 | |
| 	mousewhere (rangeX, rangeY, button)
 | |
| 	%Detect Winner - Horizontal Verification
 | |
| 	for i : 1 .. 18
 | |
| 	    if (x (i) = x (i + 6) and x (i) = x (i + 12) and x (i) = x (i + 18) and x (i) = 1) then
 | |
| 		scoreY := scoreY + 1
 | |
| 		win := "Y" %Red
 | |
| 	    elsif x (i) = x (i + 6) and x (i) = x (i + 12) and x (i) = x (i + 18) and x (i) = 2 then
 | |
| 		scoreR := scoreR + 1
 | |
| 		win := "Y"
 | |
| 		if i > 6 then
 | |
| 		    if x (i - 6) = x (i) and x (i) = x (i + 6) and x (i) = x (i + 12) and x (i) = 2 then
 | |
| 			scoreR := scoreR + 1 %Yellow
 | |
| 			win := "Y"
 | |
| 		    elsif x (i - 6) = x (i) and x (i) = x (i + 6) and x (i) = x (i + 12) and x (i) = 1 then
 | |
| 			scoreY := scoreY + 1 %Yellow
 | |
| 			win := "Y"
 | |
| 		    end if
 | |
| 		end if
 | |
| 	    end if
 | |
| 	end for
 | |
| 	%Verticle Detection
 | |
| 	for i : 1 .. 36 by 6
 | |
| 	    if (x (i) = x (i + 1) and x (i) = x (i + 2) and x (i) = x (i + 3) and x (i) = 1) then
 | |
| 		scoreY := scoreY + 1
 | |
| 		win := "Y"
 | |
| 	    elsif (x (i) = x (i + 1) and x (i) = x (i + 2) and x (i) = x (i + 3) and x (i) = 2) then
 | |
| 		scoreR := scoreR + 1
 | |
| 		win := "Y"
 | |
| 	    elsif (x (i + 1) = x (i + 2) and x (i + 1) = x (i + 3) and x (i + 1) = x (i + 4) and x (i + 1) = 1) then
 | |
| 		scoreY := scoreY + 1
 | |
| 		win := "Y"
 | |
| 	    elsif (x (i + 1) = x (i + 2) and x (i + 1) = x (i + 3) and x (i + 1) = x (i + 4) and x (i + 1) = 2) then
 | |
| 		scoreR := scoreR + 1
 | |
| 		win := "Y"
 | |
| 	    elsif (x (i + 2) = x (i + 3) and x (i + 2) = x (i + 4) and x (i + 2) = x (i + 5) and x (i + 2) = 1) then
 | |
| 		scoreY := scoreY + 1
 | |
| 		win := "Y"
 | |
| 	    elsif (x (i + 2) = x (i + 3) and x (i + 2) = x (i + 4) and x (i + 2) = x (i + 5) and x (i + 2) = 2) then
 | |
| 		scoreR := scoreR + 1
 | |
| 		win := "Y"
 | |
| 	    end if
 | |
| 	end for
 | |
| 	for i : 1 .. 36 %Positive Slope
 | |
| 	    if (x (i) = x (i + 7) and x (i) = x (i + 14) and x (i) = x (i + 21) and x (i) = 1) then
 | |
| 		scoreY := scoreY + 1
 | |
| 		win := "Y"
 | |
| 	    elsif (x (i) = x (i + 7) and x (i) = x (i + 14) and x (i) = x (i + 21) and x (i) = 2) then
 | |
| 		scoreR := scoreR + 1
 | |
| 		win := "Y"
 | |
| 	    elsif (x (i + 1) = x (i + 8) and x (i + 1) = x (i + 15) and x (i + 1) = x (i + 22) and x (i + 1) = 2) then
 | |
| 		scoreR := scoreR + 1
 | |
| 		win := "Y"
 | |
| 	    elsif (x (i + 1) = x (i + 8) and x (i + 1) = x (i + 15) and x (i + 1) = x (i + 22) and x (i + 1) = 1) then
 | |
| 		scoreY := scoreY + 1
 | |
| 		win := "Y"
 | |
| 	    elsif (x (i + 2) = x (i + 9) and x (i + 2) = x (i + 16) and x (i + 2) = x (i + 23) and x (i + 2) = 1) then
 | |
| 		scoreY := scoreY + 1
 | |
| 		win := "Y"
 | |
| 	    elsif (x (i + 2) = x (i + 9) and x (i + 2) = x (i + 16) and x (i + 2) = x (i + 23) and x (i + 2) = 2) then
 | |
| 		scoreR := scoreR + 1
 | |
| 		win := "Y"
 | |
| 	    elsif (x (1) = x (7) and x (1) = x (13) and x (1) = x (19) and x (1) = 1) then
 | |
| 		scoreY := scoreY + 1
 | |
| 		win := "Y"
 | |
| 	    elsif (x (1) = x (7) and x (1) = x (13) and x (1) = x (19) and x (1) = 2) then
 | |
| 		scoreR := scoreR + 1
 | |
| 		win := "Y"
 | |
| 	    end if
 | |
| 	end for
 | |
| 	for i : 1 .. 70 %Negative Slope
 | |
| 	    if i > 24 then
 | |
| 		if (x (i) = x (i - 5) and x (i) = x (i - 10) and x (i) = x (i - 15) and x (i) = 1) then
 | |
| 		    scoreY := scoreY + 1
 | |
| 		    win := "Y"
 | |
| 		elsif (x (i) = x (i - 5) and x (i) = x (i - 10) and x (i) = x (i - 15) and x (i) = 2) then
 | |
| 		    scoreR := scoreR + 1
 | |
| 		    win := "Y"
 | |
| 		elsif (x (i + 1) = x (i - 6) and x (i - 1) = x (i - 11) and x (i - 1) = x (i - 16) and x (i + 1) = 2) then
 | |
| 		    scoreR := scoreR + 1
 | |
| 		    win := "Y"
 | |
| 		elsif (x (i + 1) = x (i - 6) and x (i - 1) = x (i - 11) and x (i - 1) = x (i - 16) and x (i + 1) = 1) then
 | |
| 		    scoreY := scoreY + 1
 | |
| 		    win := "Y"
 | |
| 		elsif (x (i + 2) = x (i - 7) and x (i - 2) = x (i - 12) and x (i - 2) = x (i - 17) and x (i + 2) = 1) then
 | |
| 		    scoreY := scoreY + 1
 | |
| 		    win := "Y"
 | |
| 		elsif (x (i + 2) = x (i - 7) and x (i + 2) = x (i - 12) and x (i - 2) = x (i - 17) and x (i + 2) = 2) then
 | |
| 		    scoreR := scoreR + 1
 | |
| 		    win := "Y"
 | |
| 		end if
 | |
| 	    end if
 | |
| 	end for
 | |
| 	exit when win = "Y"
 | |
|     end loop
 | |
|     winner
 | |
| end game
 | |
| proc mainMenu
 | |
|     drawfillbox (0, 0, 696, 400, black)
 | |
|     Font.Draw ("", 295, 220, font1, 48)
 | |
|     Font.Draw ("", 251, 150, font1, 48)
 | |
|     Font.Draw ("", 305, 79, font1, 48)
 | |
|     loop
 | |
| 	Font.Draw ("Connect4", 155, 290, title, 52)
 | |
| 	Mouse.Where (xValue, yValue, button)
 | |
| 	if xValue >= 215 and xValue <= 455 then
 | |
| 	    if yValue >= 200 and yValue <= 250 then
 | |
| 		if button = 1 then
 | |
| 		    delay (1000)
 | |
| 		    game
 | |
| 		    exit
 | |
| 		end if
 | |
| 		drawbox (215, 200, 455, 250, 48)
 | |
| 	    else
 | |
| 		drawbox (215, 200, 455, 250, black)
 | |
| 	    end if
 | |
| 	    if yValue >= 130 and yValue <= 180 then
 | |
| 		if button = 1 then
 | |
| 		    drawfillbox (0, 0, 696, 400, black)
 | |
| 		    Font.Draw ("", 70, 350, instructionsTitle, 48)
 | |
| 		    Font.Draw ("", 0, 320, font2, 52)
 | |
| 		    Font.Draw ("", 0, 280, font2, 52)
 | |
| 		    Font.Draw ("", 0, 240, font2, 52)
 | |
| 		    Font.Draw ("", 0, 200, font2, 52)
 | |
| 		    Font.Draw ("", 245, 75, font2, 14)
 | |
| 		    pauseProgram
 | |
| 		    mainMenu
 | |
| 		end if
 | |
| 		drawbox (215, 130, 455, 180, 48)
 | |
| 	    else
 | |
| 		drawbox (215, 130, 455, 180, black)
 | |
| 	    end if
 | |
| 	    if yValue >= 60 and yValue <= 110 then
 | |
| 		if button = 1 then
 | |
| 		    shouldPlay := false
 | |
| 		    exit
 | |
| 		end if
 | |
| 		drawbox (215, 60, 455, 110, 48)
 | |
| 	    else
 | |
| 		drawbox (215, 60, 455, 110, black)
 | |
| 	    end if
 | |
| 	end if
 | |
| 	exit when button = 1
 | |
|     end loop
 | |
| end mainMenu
 | |
| proc intro
 | |
|     drawfillbox (0, 0, 696, 400, black)
 | |
|     for i : 1 .. 400
 | |
| 	drawfillbox (0, 0, 696, 400, black)
 | |
| 	Font.Draw ("", 560 - i, 250, title, 48)
 | |
| 	Font.Draw ("", -255 + i, 220, subtitle, 52)
 | |
| 	delay (4)
 | |
|     end for
 | |
|     for i : 1 .. 390
 | |
| 	drawfilloval (40, 401 - i, 20, 20, black)
 | |
| 	drawfilloval (656, 401 - i, 20, 20, black)
 | |
| 	drawfilloval (656, 400 - i, 20, 20, 12)
 | |
| 	drawfilloval (40, 400 - i, 20, 20, yellow)
 | |
| 	delay (3)
 | |
|     end for
 | |
|     loop
 | |
| 	drawfillbox (0, 0, 696, 100, black)
 | |
| 	Font.Draw ("Press any Key to Continue.", 169, 20, subtitle, 12)
 | |
| 	delay (300)
 | |
| 	drawfillbox (0, 0, 696, 100, black)
 | |
| 	Font.Draw ("Press any Key to Continue.", 169, 20, subtitle, 14)
 | |
| 	delay (300)
 | |
| 	exit when hasch
 | |
|     end loop
 | |
|     mainMenu
 | |
| end intro
 | |
| %fork backgroundMusic
 | |
| intro
 |