Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Dodge AHK - a dodge em clone in AHK


  • Please log in to reply
9 replies to this topic
ton80
  • Members
  • 74 posts
  • Last active: Oct 26 2017 12:20 AM
  • Joined: 18 Dec 2009
this is a clone of the old atari 2600 game, dodge em.. needs some cleaning up, but figured i would post it before i lost all interest in it.

use arrows to move, and space for gas pedal.. for you whipper snappers, you can change 1 lane when going fast, or 2 when going slow..
;dodge_ahk by Ton80
SetBatchLines, -1
#NoEnv
#SingleInstance, Force
CoordMode, Tooltip, Screen
CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
boardWidth := A_ScreenWidth, boardheight := A_ScreenHeight
gosub, Initialize_Color_Values
gosub, Initialize_Variables
gosub, Initialize_Graphics
gosub, Initialize_Board
gosub, Initialize_Fuel
gosub, Update_Screen
gosub, Main_Loop
return

Main_Loop:
Loop
	{
		Change_Delay_Player := A_TickCount - Car_Player_Last_Change_Lane
		Car_Player_Speed := Car_Player_Speed_Slow
		Loop, Parse, Player_1_Controls, csv
			If (GetKeyState(%A_Loopfield%, "P"))
					If (A_Loopfield = "Player_1_Up" or  A_Loopfield = "Player_1_Down" or A_Loopfield = "Player_1_Left" or A_Loopfield = "Player_1_Right") && !(Change_Delay_Player > 500) 
						continue
					else gosub, %A_LoopField%
		gosub, Car_Player_Move
		gosub, Car_Player_Offset
		gosub, Car_Computer_Move
		gosub, Car_Computer_Offset
		gosub, Update_Screen
		gosub, Car_Fuel_Collision
		gosub, Car_Player_Wall_Collision
		gosub, Car_Computer_Wall_Collision
		gosub, Car_Computer_Switch_Lanes
		gosub, Car_Car_Collision
	}
return

Player_1_Up:
if (DllCall("RectInRegion", "Int", Vertical_Passage, "UInt", &ptCar_Player)) & !(Car_Player_Direction = 1) & !(Car_Player_Direction = 3)
	{
		If (Car_Player_Y > Boardheight / 2 )
			{
				car_Player_Lane := car_Player_speed = car_player_speed_slow ? car_player_lane += 2 : car_player_lane +=1
				gosub, Player_1_Check_Bounds
				Car_Player_Y :=  Lane%Car_Player_Lane%Y2 - Car_Height / 2
			}
		else
			{
				car_Player_Lane := car_Player_speed = car_player_speed_slow ? car_player_lane -= 2 : car_player_lane -=1
				gosub, Player_1_Check_Bounds
				Car_Player_Y := Lane%Car_Player_Lane%Y1 - Car_Height / 2
			}
		gosub, Car_Player_Offset
		Car_Player_Last_Change_Lane := A_TickCount
	}
return

Player_1_Down:
if (DllCall("RectInRegion", "Int", Vertical_Passage, "UInt", &ptCar_Player)) & !(Car_Player_Direction = 3) & !(Car_Player_Direction = 1)
	{
		If (Car_Player_Y > Boardheight / 2 )
			{
				car_Player_Lane := car_Player_speed = car_player_speed_slow ? car_player_lane -= 2 : car_player_lane -=1
				gosub, Player_1_Check_Bounds
				Car_Player_Y := Lane%Car_Player_Lane%Y2 - Car_Height / 2
			}
		else
			{
				car_Player_Lane := car_Player_speed = car_player_speed_slow ? car_player_lane += 2 : car_player_lane +=1
				gosub, Player_1_Check_Bounds
				Car_Player_Y := Lane%Car_Player_Lane%Y1 - Car_Height / 2
			}
		gosub, Car_Player_Offset
		Car_Player_Last_Change_Lane := A_TickCount
	}
return

Player_1_Right:
If (DllCall("RectInRegion", "Int", Horizontal_Passage, "UInt", &ptCar_Player)) & !(Car_Player_Direction = 2) & !(Car_Player_Direction = 4)
	{
	If (Car_Player_X > BoardWidth / 2 )
			{
				car_Player_Lane := car_Player_speed = car_player_speed_slow ? car_player_lane -= 2 : car_player_lane -=1
				gosub, Player_1_Check_Bounds
				Car_Player_X := Lane%Car_Player_Lane%X2 - Car_Height / 2
			}
		else
			{
				car_Player_Lane := car_Player_speed = car_player_speed_slow ? car_player_lane += 2 : car_player_lane +=1
				gosub, Player_1_Check_Bounds
				Car_Player_X := Lane%Car_Player_Lane%X1 - Car_Height / 2
			}
		gosub, Car_Player_Offset
		Car_Player_Last_Change_Lane := A_TickCount
	}
return

Player_1_Left:
If (DllCall("RectInRegion", "Int", Horizontal_Passage, "UInt", &ptCar_Player))  & !(Car_Player_Direction = 4) & !(Car_Player_Direction = 2)
	{
	If (Car_Player_X > BoardWidth / 2 )
			{
				car_Player_Lane := car_Player_speed = car_player_speed_slow ? car_player_lane += 2 : car_player_lane +=1
				gosub, Player_1_Check_Bounds
				Car_Player_X := Lane%Car_Player_Lane%X2 - Car_Height / 2
			}
		else
			{
				car_Player_Lane := car_Player_speed = car_player_speed_slow ? car_player_lane -= 2 : car_player_lane -=1
				gosub, Player_1_Check_Bounds
				Car_Player_X := Lane%Car_Player_Lane%X1 - Car_Height / 2
			}
			gosub, Car_Player_Offset
			Car_Player_Last_Change_Lane := A_TickCount
	}
return

Player_1_Check_Bounds:
Car_Player_Lane < 1 ? Car_Player_Lane := 1 : Car_Player_Lane > 4 ? Car_Player_Lane := 4
return

Player_1_Fast:
Car_Player_Speed := Car_Player_Speed_Fast
return

Car_Player_Move:
Car_Player_Elapsed_Time := (A_TickCount - Car_Player_Last_Move_Time) / 1000
d := Car_Player_Direction = 1 ? Car_Player_Y -= Round(Car_Player_Speed * Car_Player_Elapsed_Time) : Car_Player_Direction = 2 ? Car_Player_X += Round(Car_Player_Speed * Car_Player_Elapsed_Time) : Car_Player_Direction = 3 ? Car_Player_Y += Round(Car_Player_Speed * Car_Player_Elapsed_Time) : Car_Player_Direction = 4 ? Car_Player_X -= Round(Car_Player_Speed * Car_Player_Elapsed_Time)
d :=
return

Car_Computer_Move:
Car_Computer_Elapsed_Time := (A_TickCount - Car_Computer_Last_Move_Time) / 1000
d := Car_Computer_Direction = 1 ? Car_Computer_Y -= Round(Car_Computer_Speed * Car_Computer_Elapsed_Time) : Car_Computer_Direction = 2 ? Car_Computer_X += Round(Car_Computer_Speed * Car_Computer_Elapsed_Time) : Car_Computer_Direction = 3 ? Car_Computer_Y += Round(Car_Computer_Speed * Car_Computer_Elapsed_Time) : Car_Computer_Direction = 4 ? Car_Computer_X -= Round(Car_Computer_Speed * Car_Computer_Elapsed_Time)
d :=
return

Car_Player_Offset:
Car_Player_x2:= Car_Player_X + Car_Width,Car_Player_Y2:= Car_Player_Y + Car_Height,Car_Player_Last_Move_Time:= A_TickCount
NumPut(Car_Player_X, ptCar_Player, 0)
NumPut(Car_Player_Y, ptCar_Player, 4)
NumPut(Car_Player_X2, ptCar_Player, 8)
NumPut(Car_Player_Y2, ptCar_Player, 12)
return

Car_Computer_Offset:
Car_Computer_x2 := Car_Computer_X + Car_Width,Car_Computer_Y2 := Car_Computer_Y + Car_Height,Car_Computer_Last_Move_Time := A_TickCount
NumPut(Car_Computer_X, ptCar_Computer, 0)
NumPut(Car_Computer_Y, ptCar_Computer, 4)
NumPut(Car_Computer_X2, ptCar_Computer, 8)
NumPut(Car_Computer_Y2, ptCar_Computer, 12)
return

Car_Computer_Switch_Lanes:
If (A_TickCount - Car_Computer_Last_Change_Lane < Car_Computer_Reaction_Time)
	return
if (Car_Computer_Lane < Car_Player_Lane)
	{
		If (Car_Computer_Y < boardheight / 2) && (DllCall("RectInRegion", "Int", Vertical_Passage, "UInt", &ptCar_Computer))
			Car_Computer_Lane ++,Car_Computer_Y:= Lane%Car_Computer_Lane%Y1 - Car_Height / 2,Car_Computer_Last_Change_Lane := A_TickCount
		Else If (Car_Computer_Y > boardheight / 2) && (DllCall("RectInRegion", "Int", Vertical_Passage, "UInt", &ptCar_Computer))
			Car_Computer_Lane ++,Car_Computer_Y := Lane%Car_Computer_Lane%Y2 - Car_Height / 2,Car_Computer_Last_Change_Lane := A_TickCount
		Else If (Car_Computer_X < boardWidth / 2) && (DllCall("RectInRegion", "Int", Horizontal_Passage, "UInt", &ptCar_Computer))
			Car_Computer_Lane ++,Car_Computer_X := Lane%Car_Computer_Lane%X1 - Car_Width / 2,Car_Computer_Last_Change_Lane := A_TickCount
		Else If (Car_Computer_X > boardWidth / 2) && (DllCall("RectInRegion", "Int", Horizontal_Passage, "UInt", &ptCar_Computer))
			Car_Computer_Lane ++,Car_Computer_X := Lane%Car_Computer_Lane%X2 - Car_Width / 2,Car_Computer_Last_Change_Lane := A_TickCount
		Else 
			return
		gosub, Car_Computer_Offset
	}
Else if (Car_Computer_Lane > Car_Player_Lane)
	{
		If (Car_Computer_Y < boardheight / 2) && (DllCall("RectInRegion", "Int", Vertical_Passage, "UInt", &ptCar_Computer))
			Car_Computer_Lane --,Car_Computer_Y := Lane%Car_Computer_Lane%Y1 - Car_Height / 2,Car_Computer_Last_Change_Lane := A_TickCount
		Else If (Car_Computer_Y > boardheight / 2) && (DllCall("RectInRegion", "Int", Vertical_Passage, "UInt", &ptCar_Computer))
			Car_Computer_Lane --,Car_Computer_Y := Lane%Car_Computer_Lane%Y2 - Car_Height / 2,Car_Computer_Last_Change_Lane := A_TickCount
		Else If (Car_Computer_X < boardWidth / 2) && (DllCall("RectInRegion", "Int", Horizontal_Passage, "UInt", &ptCar_Computer))
			Car_Computer_Lane --,Car_Computer_X := Lane%Car_Computer_Lane%X1 - Car_Width / 2,Car_Computer_Last_Change_Lane := A_TickCount
		Else If (Car_Computer_X > boardWidth / 2) && (DllCall("RectInRegion", "Int", Horizontal_Passage, "UInt", &ptCar_Computer))
			Car_Computer_Lane --,Car_Computer_X := Lane%Car_Computer_Lane%X2 - Car_Width / 2,Car_Computer_Last_Change_Lane := A_TickCount
		Else 
			return
		gosub, Car_Computer_Offset
	}

return

;collisions
Car_Car_Collision:
if (DllCall("IntersectRect", "UInt", &ptCrash, "UInt", &ptCar_Player, "UInt", &ptCar_Computer))
		{
			gosub, Screen_Flash_Crash
			Player_Lives --
			If Player_Lives <= 0
				gosub Game_Over
			else
				gosub, Reset_Board
		}
return

Car_Fuel_Collision:
Loop, 128
	{
		If DllCall("RectInRegion", "Int", Fuel_Pellet_%A_Index%, "Int", &ptCar_Player)
			{
				DllCall("DeleteObject", "Int", Fuel_Pellet_%A_Index%)
				Player_Score += Fuel_Points,Fuel_Pellets_Count --
					If (Fuel_Pellets_Count = 0)
						{
							Computer_Skill < 5 ? Computer_Skill ++ : Computer_Skill := 5,Player_Score += 100 * Player_Level,Player_Level ++
							gosub, Screen_Flash_Win
							gosub, Reset_Board
						}
			}
	}
return

Car_Player_Wall_Collision:
If (Car_Player_Direction = 1) && (Car_Player_Y <= Lane%Car_Player_Lane%Y1 - Car_Width / 2)
	Car_Player_Direction := 4, Car_Player_Y	:= Lane%Car_Player_Lane%Y1 - Car_Width /2
Else If (Car_Player_Direction = 2) && (Car_Player_X >= Lane%Car_Player_Lane%X2 - Car_Width / 2)
	Car_Player_Direction := 1, Car_Player_X	:= Lane%Car_Player_Lane%X2 - Car_Width /2
Else If (Car_Player_Direction = 3) && (Car_Player_Y >= Lane%Car_Player_Lane%Y2 - Car_Width / 2)
	Car_Player_Direction := 2, Car_Player_Y	:= Lane%Car_Player_Lane%Y2 - Car_Width /2
Else If (Car_Player_Direction = 4) && (Car_Player_X <= Lane%Car_Player_Lane%X1 - Car_Width / 2)
	Car_Player_Direction := 3, Car_Player_X	:= Lane%Car_Player_Lane%X1 - Car_Width /2
return

Car_Computer_Wall_Collision:
If (Car_Computer_Direction = 1) && (Car_Computer_Y <= Lane%Car_Computer_Lane%Y1 - Car_Width / 2)
	Car_Computer_Direction := 2, Car_Computer_Y	:= Lane%Car_Computer_Lane%Y1 - Car_Width /2
Else If (Car_Computer_Direction = 2) && (Car_Computer_X >= Lane%Car_Computer_Lane%X2 - Car_Width / 2)
	Car_Computer_Direction := 3, Car_Computer_X	:= Lane%Car_Computer_Lane%X2 - Car_Width /2
Else If (Car_Computer_Direction = 3) && (Car_Computer_Y >= Lane%Car_Computer_Lane%Y2 - Car_Width / 2)
	Car_Computer_Direction := 4, Car_Computer_Y	:= Lane%Car_Computer_Lane%Y2 - Car_Width /2
Else If (Car_Computer_Direction = 4) && (Car_Computer_X <= Lane%Car_Computer_Lane%X1 - Car_Width / 2)
	Car_Computer_Direction := 1, Car_Computer_X	:= Lane%Car_Computer_Lane%X1 - Car_Width /2
return

;display
game_over:
MsgBox,0,Dodge AHK, % "GAME OVER" . "`r`n`r`nScore : " . Player_Score
sleep, 3000
gosub, cleanup
Reload
return

Reset_Board:
Car_Computer_Reaction_Time := 2600 - (Computer_Skill * 500)
sleep, 1000
gosub, initialize_fuel
gosub, Car_Player_Offset
gosub, Car_Computer_Offset
Car_Player_X:= Car_Player_X_Start,Car_Player_Y:= Car_Player_Y_Start,Car_Player_Direction:= 2,Car_Player_Lane:= 1,Car_Player_Last_Move_Time := A_TickCount
Car_Computer_X:= Car_Computer_X_Start,Car_Computer_Y:= Car_Computer_Y_Start,Car_Computer_Direction:= 4,Car_Computer_Lane:= 1,Car_Computer_Last_Move_Time:= A_TickCount
return

Score_Display:
Lives_Display:= "Lives:" Player_Lives - 1,Level_Display:= "Level:" Player_Level
DllCall("TextOut", "Int", hdcMem, "UInt", boardwidth * .1, "UInt", 0, "UInt", &Player_Score, "UInt", StrLen(Player_Score))
DllCall("TextOut", "Int", hdcMem, "UInt", boardwidth * .1, "UInt", boardheight * .92, "UInt", &Lives_Display, "UInt", StrLen(Lives_Display))
DllCall("TextOut", "Int", hdcMem, "UInt", BoardWidth *.6, "UInt", boardheight * .92, "UInt", &Level_Display, "UInt", StrLen(Level_Display))
return

Update_Screen:
gosub, draw_fuel
gosub, Score_Display
DllCall("FillRect", "Int", hdcMem, "UInt", &ptCar_Player, "int", brush_red)
DllCall("FrameRect", "Int", hdcMem, "UInt", &ptCar_Player, "int", brush_yellow)
DllCall("FillRect", "Int", hdcMem, "UInt", &ptCar_Computer, "int", brush_Blue)
DllCall("FrameRect", "Int", hdcMem, "UInt", &ptCar_Computer, "int", brush_yellow)
DllCall("FillRgn", "Int", HdcMem, "Int", Wall, "Int", Brush_Purple)
DllCall("FillRgn", "Int", HdcMem, "Int", Car_Computer, "Int", Brush_blue)
DllCall("FrameRgn", "Int", HdcMem, "Int", Car_Computer, "Int", Brush_yellow, "Int", 1, "Int", 1)
DllCall("FrameRgn", "Int", HdcMem, "Int", Wall, "Int", Brush_Red, "Int", 2, "Int", 2)
DllCall("BitBlt", "uint", hdcWin, "int", 0, "int", 0, "int", boardWidth, "int", boardHeight, "uint", hdcMem, "int", 0, "int", 0, "uint", 0xCC0020)
DllCall("FillRect", "uint", hdcMem, "UInt", &ptWin, "uint", Brush_BackGround)
return

Screen_Flash_Crash:
Loop, 30
	{
		DllCall("FillRect", "Int", hdcMem, "Int", &ptWin, "Int", Brush_White)
		gosub, update_Screen
		sleep, 5
	}
return

Screen_Flash_Win:
Loop, 100
	{
		DllCall("FillRect", "Int", hdcWin, "Int", &ptWin, "Int", Brush_White)
		gosub, update_Screen
		sleep, 5
	}
return

;setup
Initialize_Color_Values:
Green:= "0x008000",Silver:= "0xC0C0C0",Lime:= "0x00FF00",Gray:= "0x808080",Olive:= "0x008080", White:= "0xFFFFFF",Yellow:= "0x00FFFF",Maroon:= "0x000080",Navy:= "0x800000",Red	:= "0x0000FF",Blue:= "0xFF0000",Purple:= "0x800080",Teal:= "0x808000",Fuchsia:= "0xFF00FF",Aqua:= "0xFFFF00",Black:= "0x000000",Brown:= "0x2A2AA5",RGN_AND:= 1,RGN_COPY:= 5,RGN_DIFF:= 4,RGN_OR:= 2,RGN_XOR:= 3
return

Initialize_Variables:
Track_width_feet:= 53,Track_height_feet:= 27,Feet_per_pixel := Track_width_feet / boardwidth
Car_Player_Speed_Slow := 20,Car_Player_Speed_Fast := 45,Car_Player_Speed_Slow /= feet_per_pixel,Car_Player_Speed_Fast /= feet_per_pixel,Car_Player_Speed := Car_Player_Speed_Slow
Car_Height := boardHeight * .056,Car_Width := boardHeight * .056
Car_Player_X_Start:= boardWidth * .552,Car_Player_Y_Start:= boardHeight * .838,Car_Player_X := Car_Player_X_Start,Car_Player_Y:= Car_Player_Y_Start,Car_Player_Direction:= 2,Car_Player_Lane:= 1,Player_Level:= 1
VarSetCapacity(ptCar_Player, 16,0)
VarSetCapacity(ptCrash, 16,0)
VarSetCapacity(ptCar_Computer, 16,0)
gosub, car_player_offset
Player_Lives:= 5,Player_Score:= 0,Fuel_Points:= 10
Player_1_Right:= "Right",Player_1_Left:= "Left",Player_1_Down:= "Down",Player_1_Up:= "Up",Player_1_Fast:= "Space",Toggle_Frame_Rate:= "F1"
Player_1_Controls := "Player_1_Fast,Player_1_Right,Player_1_Left,Player_1_Down,Player_1_Up,Toggle_Frame_Rate"
Car_Computer_Speed:= 30,Car_Computer_Speed /= feet_per_pixel,Car_Computer_X_Start:= boardwidth * .418,Car_Computer_Y_Start:= boardheight * .838,Car_Computer_X:= Car_Computer_X_Start,Car_Computer_Y:= Car_Computer_Y_Start,Car_Computer_Direction:= 4,Car_Computer_Lane:= 1,Car_Computer_Reaction_Time:= 2000,Computer_Skill:= 1,Fuel_Pellet_Size:= boardwidth * .01
gosub,car_computer_offset
Lane1X1 := boardwidth * .039,Lane1X2 := boardwidth * .961,Lane1Y1 := boardheight * .139,Lane1Y2 := boardheight * .861
Lane2X1 := boardwidth * .102,Lane2X2 := boardWidth * .898,Lane2Y1 := boardheight * .222,Lane2Y2 := boardheight * .778
Lane3X1 := boardWidth * .164,Lane3X2 := boardWidth * .836,Lane3Y1 := boardheight * .306,Lane3Y2 := boardheight * .694
Lane4X1 := boardWidth * .227,Lane4X2 := boardWidth * .773,Lane4Y1 := boardheight * .389,Lane4Y2 := boardheight * .611
Car_Player_Elapsed_Time := 0, Car_Player_Last_Move_Time := A_TickCount,Car_Player_Last_Change_Lane := A_TickCount,Car_Computer_Last_Change_Lane := A_TickCount,Car_Computer_Last_Move_Time := A_TickCount
return

Initialize_Graphics:
VarSetCapacity(ptWin, 16, 0)
NumPut(boardWidth, ptWin, 8) , NumPut(boardHeight, ptWin, 12)
gui,1: color, black
gui,show, h%BoardHeight% w%BoardWidth% x-3 y-22
hdcWin := DllCall("GetDC", "UInt", hwnd:=WinExist("A")),hdcMem := DllCall("CreateCompatibleDC", "UInt", hdcWin),hbm := DllCall("CreateCompatibleBitmap", "uint", hdcWin, "int", boardWidth, "int", boardHeight), Pen := DllCall("CreatePen", "UInt", 0, "UInt", 6, "UInt", Green)
DllCall("SelectObject", "uint", hdcMem, "uint", hbm)
DllCall("SelectObject","UInt", hdcMem, "UInt", Pen)
DllCall("SelectObject","UInt", hdcWin, "UInt", Pen)
Brush_BackGround:= DllCall("CreateSolidBrush", "Int", Black),Brush_Red:= DllCall("CreateSolidBrush", "Int", Red),Brush_Green:= DllCall("CreateSolidBrush", "Int", Green),Brush_Blue:= DllCall("CreateSolidBrush", "Int", Blue),Brush_Maroon:= DllCall("CreateSolidBrush", "Int", Maroon),Brush_Purple:= DllCall("CreateSolidBrush", "Int", Purple),Brush_Yellow:= DllCall("CreateSolidBrush", "Int", Yellow),font_width:= boardwidth * .05,font_height:= boardheight *.06,hFont:=DllCall("CreateFont", "int", font_width, "int",font_height, "int", 0, "int", 0, "int", 1000 
  ,"uint",0,"uint",0,"uint",0,"uint",1,"uint",0,"uint",0,"uint",0,"uint",0,"str", "Comic Sans MS Bold") 
DllCall("SelectObject", "uint", hdcMem, "uint", hFont) 
DllCall("SetBkColor", "Int", hdcMem, "Int", black)
DllCall("SetTextColor", "Int", hdcMem, "Int", green)
return

Initialize_Board:
Wall:= DllCall("CreateRectRgn", "Int", 0, "Int", boardheight * .09, "Int", boardwidth, "Int", boardheight * .91),Wall2:= DllCall("CreateRectRgn", "Int", boardwidth * .015, "Int", boardheight * .1, "Int", boardwidth *.985, "Int", boardheight *.9)
DllCall("CombineRgn", "Int", Wall, "Int", Wall, "Int", Wall2, "Int", rgn_diff)
DllCall("DeleteObject", "Int", Wall2)
DllCall("DeleteObject", "Int", Wall2)
Wall2:= DllCall("CreateRectRgn", "Int", boardwidth *.0625, "Int", boardheight *.176, "Int", boardwidth * .938, "Int", boardheight *.824),Wall3 := DllCall("CreateRectRgn", "Int", boardwidth *.0781, "Int", boardheight *.185, "Int", boardwidth * .922, "Int", boardheight *.815)
DllCall("CombineRgn", "Int", Wall2, "Int", Wall2, "Int", Wall3, "Int", rgn_xor)
DllCall("CombineRgn", "Int", Wall, "Int", Wall, "Int", Wall2, "Int", rgn_xor)
DllCall("DeleteObject", "Int", Wall2)
DllCall("DeleteObject", "Int", Wall3)
Wall2:= DllCall("CreateRectRgn", "Int", boardwidth * .125, "Int", boardheight * .259, "Int", boardwidth *.875, "Int", boardheight * .741),Wall3 := DllCall("CreateRectRgn", "Int", boardwidth * .141, "Int", boardheight * .269, "Int", boardwidth *.859, "Int", boardheight * .731)
DllCall("CombineRgn", "Int", Wall2, "Int", Wall2, "Int", Wall3, "Int", rgn_xor)
DllCall("CombineRgn", "Int", Wall, "Int", Wall, "Int", Wall2, "Int", rgn_xor)
DllCall("DeleteObject", "Int", Wall2)
DllCall("DeleteObject", "Int", Wall3)
Wall2:= DllCall("CreateRectRgn", "Int", boardwidth * .188, "Int", boardheight * .343, "Int", boardwidth * .813, "Int", boardheight * .657),Wall3 := DllCall("CreateRectRgn", "Int", boardwidth * .203, "Int", boardheight * .352, "Int", boardwidth * .797, "Int", boardheight * .648)
DllCall("CombineRgn", "Int", Wall2, "Int", Wall2, "Int", Wall3, "Int", rgn_xor)
DllCall("CombineRgn", "Int", Wall, "Int", Wall, "Int", Wall2, "Int", rgn_xor)
DllCall("DeleteObject", "Int", Wall2)
DllCall("DeleteObject", "Int", Wall3)
Vertical_Passage:= DllCall("CreateRectRgn", "Int", boardwidth * .448, "Int", 0, "Int", boardwidth * .552, "Int", boardheight)
DllCall("CombineRgn", "Int", Wall, "Int", Wall, "Int", Vertical_Passage, "Int", rgn_diff)
DllCall("DeleteObject", "Int", Vertical_Passage)
Vertical_Passage:= DllCall("CreateRectRgn", "Int", boardwidth / 2 - car_width / 2, "Int", 0, "Int", boardwidth / 2 + car_width / 2, "Int", boardheight), Horizontal_Passage := DllCall("CreateRectRgn", "Int", 0, "Int", boardHeight *.407, "Int", boardwidth, "Int", boardheight * .593)
DllCall("CombineRgn", "Int", Wall, "Int", Wall, "Int", Horizontal_Passage, "Int", rgn_diff)
DllCall("DeleteObject", "Int", Horizontal_Passage)
Horizontal_Passage := DllCall("CreateRectRgn", "Int", 0, "Int", boardHeight / 2 - car_height / 2, "Int", boardwidth, "Int", boardheight / 2 + car_height / 2),Wall2 := DllCall("CreateRectRgn", "Int", boardwidth * .250, "Int", boardheight * .426, "Int", boardwidth * .750, "Int", boardheight * .574),Wall3 := DllCall("CreateRectRgn", "Int", boardwidth * .266, "Int", boardheight * .435, "Int", boardwidth * .734, "Int", boardheight * .565)
DllCall("CombineRgn", "Int", Wall2, "Int", Wall2, "Int", Wall3, "Int", rgn_xor)
DllCall("CombineRgn", "Int", Wall, "Int", Wall, "Int", Wall2, "Int", rgn_xor)
DllCall("DeleteObject", "Int", Wall2)
DllCall("DeleteObject", "Int", Wall3)
return

Draw_Fuel:
Loop, 128
		{
			DllCall("FillRgn", "Int", hdcMem, "Int", Fuel_Pellet_%A_Index%, "Int", brush_yellow)
			if (fuel_pellet_size > 5)
				DllCall("FrameRgn", "Int", hdcMem, "Int", Fuel_Pellet_%A_Index%, "Int", brush_maroon, "Int", 2, "Int", 2)
		}
return

Initialize_Fuel:
Fuel_X1:= Lane1X1,Fuel_X2:= Lane1X2,Fuel_Space:= (Fuel_X2 - Fuel_X1) / 15.2,,Pellet_Number:= 1
Loop, 2
	{
		Ypos := A_Index
		Loop, 4
			{
				Fuel_Y := Lane%A_Index%Y%Ypos% - (Fuel_Pellet_Size / 2)
				Loop, 16
						Fuel_Pellet_%Pellet_Number% := DllCall("CreateEllipticRgn", "Int", Fuel_X1, "Int", Fuel_Y, "Int", Fuel_X1 + Fuel_Pellet_Size, "Int", Fuel_Y + Fuel_Pellet_Size), Fuel_X1 += Fuel_Space,Pellet_Number ++
				Fuel_X1 := Lane1X1
			}	
	}
dPellet = 8,9,24,25,40,41,56,57,72,73,88,89,104,105,120,121
Loop, parse, dpellet, csv
	DllCall("DeleteObject", "Int", Fuel_Pellet_%A_Loopfield%)
Fuel_Pellets_Count := 112
return

GuiClose:
esc::
OnExit
gosub, Cleanup
exitapp

cleanup:
objects = Wall,Vertical_Passage,Horizontal_Passage,Pen,Brush_BackGround,Brush_Red,Brush_Green,Brush_Blue,Brush_Maroon,Brush_Purple,Brush_Yellow,hbm
loop, parse, objects, csv
	DllCall("DeleteObject", "Int", %A_Loopfield%)
DllCall("ReleaseDC", uint, hdcWin)
DllCall("ReleaseDC", uint, hdcMem)
Loop, 128
	DllCall("DeleteObject", "Int", Fuel_Pellet_%A_Index%)
return

edit : cleaned up code, shortend by almost 300 lines..

SoggyDog
  • Members
  • 803 posts
  • Last active: Mar 04 2013 06:27 AM
  • Joined: 02 May 2006
Nice.

ton80
  • Members
  • 74 posts
  • Last active: Oct 26 2017 12:20 AM
  • Joined: 18 Dec 2009

Nice.



thanks SoggyDog.. you can run it in any size window.. even runs great at 100 x 200, so you can play at work :)

here's a screenshot..
Posted Image

ton80
  • Members
  • 74 posts
  • Last active: Oct 26 2017 12:20 AM
  • Joined: 18 Dec 2009
tough crowd.. 20,990, level 11.. i was in the zone..

tidbit
  • Administrators
  • 2709 posts
  • Hates playing Janitor
  • Last active: Jan 15 2016 11:37 PM
  • Joined: 09 Mar 2008
:shock: I can't even get past level 1 xD 2,066 points.

this is pretty fun!

rawr. be very afraid
*poke*
. Populate the AutoHotkey city. Pointless but somewhat fun. .


ton80
  • Members
  • 74 posts
  • Last active: Oct 26 2017 12:20 AM
  • Joined: 18 Dec 2009

I can't even get past level 1


your in for a real treat when you make it to level 5 then.. lol.. he is a BEAST!

kenn
  • Members
  • 407 posts
  • Last active: Jan 14 2015 08:16 PM
  • Joined: 11 Oct 2010
@Ton80 Nice work. I like this kind of games. I saw a prototype of breakout type games here <!-- m -->http://www.autohotke...pic.php?t=78879<!-- m --> I hope you publish it soon
Edit : It appears that you already published it :) <!-- m -->http://www.autohotke...pic.php?t=79214<!-- m -->