Jorbalax's Tools/Etc
Author |
Message |
Jorbalax
|
Posted: Wed Apr 27, 2005 11:55 pm Post subject: Jorbalax's Tools/Etc |
|
|
Just a couple tools/projects that I've created to help me work on a game and to get a better grasp of Turing and it's commands.
---Colour Grid---
I couldn't find a chart with all 256 color codes on it, so I made one. Notably laggy, and some of the colors return the same value since I used the whatdotcolor command.
code: |
%Colour Codes%
%By Jorbalax%
View.Set ("graphics:max;max, nobuttonbar, offscreenonly, title:Colour Codes")
var mousex, mousey, mousebutton : int
var x, xc, y : int := 0
var xincrement := maxx div 16
var yincrement := maxy div 16
var picID: int
%Draws the grid%
for i : 0 .. 255
Draw.FillBox (x, y, x + xincrement, y + yincrement, (i))
x := x + xincrement
xc := xc + 1
if xc = 16 then
y := y + yincrement
xc := 0
x := 0
end if
end for
View.Update
%Capture the grid
picID := Pic.New (0, 0, maxx, maxy)
%Display Value depending on where mouse is.
loop
for i: 0..255
Mouse.Where (mousex, mousey, mousebutton)
if whatdotcolor (mousex, mousey )= (i) then
put (i)
View.Update
end if
cls
Pic.Draw (picID, 0, 0, picCopy)
end for
end loop
|
---Multi-Ball Stream---
Working with classes and procedures to produce multiple balls bouncing around the screen. Edit the constants near the top to change Ball amount, size, and their speed (lower is faster).
code: |
%Draws a fixed amount of balls on the screen that have random colors and bounce off of walls.%
View.Set ("graphics:max;max, nobuttonbar,title:Mult-Ball Stream, offscreenonly")
%Editable Constants%
const BALLCOUNT := 500
const BALLRADIUS := 5
const BALLSPEED := 0
class RandomCircles
import BALLRADIUS, BALLSPEED
export StartValues, BallDirection, BallCreate
var cx, cy, cdirectionx, cdirectiony, iColour : int := 0
var chars : string (1)
%Starting Values for Balls (location, color, and direction)
procedure StartValues
randint (cx, 0+BALLRADIUS*2, maxx-BALLRADIUS*2)
randint (cy, 0+BALLRADIUS*2, maxy-BALLRADIUS*2)
loop
randint (iColour, 1, 255)
randint (cdirectionx, -5, 5)
randint (cdirectiony, -5, 5)
exit when cdirectionx not = 0
exit when cdirectiony not = 0
end loop
end StartValues
%Wall collision
procedure BallDirection
cx := cx + cdirectionx
cy := cy + cdirectiony
if cx < BALLRADIUS or cx > maxx - BALLRADIUS then
cdirectionx := -cdirectionx
end if
if cy < BALLRADIUS or cy > maxy - BALLRADIUS then
cdirectiony := -cdirectiony
end if
end BallDirection
%Ball Creation Procedure%
procedure BallCreate
Draw.FillOval (cx, cy, BALLRADIUS, BALLRADIUS, iColour)
BallDirection
delay (BALLSPEED)
end BallCreate
end RandomCircles
%Draws all of the balls%
procedure DrawBall
%Creates an array of pointers%
var p : array 1 .. BALLCOUNT of pointer to RandomCircles
for i : 1 .. BALLCOUNT
new RandomCircles, p (i)
end for
%Produces starting values and creates each ball simultaneously%
loop
for i : 1 .. BALLCOUNT
p (i) -> StartValues
end for
loop
for i : 1 .. BALLCOUNT
p (i) -> BallCreate
end for
View.Update
cls
end loop
end loop
end DrawBall
%Executes%
DrawBall
|
---Simple Etch-a-Sketch Program---
Simple enough. Arrow keys to move, space bar resets.
code: |
%Simple Etch-a-Sketch Program%
%By Jorbalax%
%Use arrow keys to move, space bar to clear.%
%-------------------------------------------%
View.Set ("graphics:400;300, offscreenonly, Title:Etch-a-Sketch")
const RADIUS := 3
const DCOLOR := 7
const DDISTANCE := 1
const DELAYTIME := 10
var x, y : int
var chars : array char of boolean
x := 200
y := 150
%Determines if boundaries have been reached, and acts on them (resets ball on other side)%
procedure DrawBounds
if x > 400 then
x := 0
end if
if y > 300 then
y := 0
end if
if x < 0 then
x := 400
end if
if y < 0 then
y := 300
end if
end DrawBounds
%Resets screen%
procedure Reset
for i : 0 .. 300
Draw.Line (0, (i), 400, (i), 7)
View.Update
cls
end for
end Reset
%Determines if a key has been entered, and acts on it%
procedure KeyInput
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) then
y := y + DDISTANCE
end if
if chars (KEY_DOWN_ARROW) then
y := y - DDISTANCE
end if
if chars (KEY_LEFT_ARROW) then
x := x - DDISTANCE
end if
if chars (KEY_RIGHT_ARROW) then
x := x + DDISTANCE
end if
if chars (' ') then
Reset
end if
end KeyInput
%Execution%
%----------------------------------------------%
loop
Draw.FillOval (x, y, RADIUS, RADIUS, DCOLOR)
View.Update
delay (DELAYTIME)
KeyInput
DrawBounds
end loop
|
More to come, I'm sure.
[EDIT] Fixed Etch a Sketch program, I had accidently put an older version of it up. Also changed space character like suggested. |
|
|
|
|
|
Sponsor Sponsor
|
|
|
jamonathin
|
Posted: Thu Apr 28, 2005 8:24 am Post subject: (No subject) |
|
|
Those are nice simple little progs. I'd definately work on that color prog.
And here's a little tip for your etch a sketch. Instead of using chr(32), you can simple use.... (' '). That work for any key that inserts a character.
[ ('a') or ('t') or ('0') or (]') and so on ]
Good work though. |
|
|
|
|
|
Shyfire
|
Posted: Thu Apr 28, 2005 10:36 am Post subject: (No subject) |
|
|
screen cord finder
code: | var keys:array char of boolean
var x,y:int:=10
loop
drawfilloval(x,y,2,2,255)
View.Update
Input.KeyDown (keys)
if keys (KEY_UP_ARROW) and whatdotcolor (x,y+5) not=255 then
y+=1
View.Update
elsif keys (KEY_RIGHT_ARROW) and whatdotcolor (x+5,y) not=255 then
x+=1
View.Update
elsif keys (KEY_LEFT_ARROW) and whatdotcolor (x-5,y) not =255 then
x-=1
View.Update
elsif keys (KEY_DOWN_ARROW) and whatdotcolor (x,y-5) not=255 then
y-=1
View.Update
end if
locate(1,2)
put"x"
locate(1,6)
put x
locate(2,2)
put"y"
locate(2,6)
put y
end loop |
|
|
|
|
|
|
jamonathin
|
Posted: Thu Apr 28, 2005 11:18 am Post subject: (No subject) |
|
|
KISS, you can make one of those in 6 lines using mousewhere |
|
|
|
|
|
Jorbalax
|
Posted: Thu Apr 28, 2005 10:59 pm Post subject: (No subject) |
|
|
Simpler Color Code program. Notice the somewhat ackward location of the text on some of the circles. I'm assuming this is because the text is auto aligned to a colum/row. If someone knows a way to stop it from happening, please do tell.
code: |
%Colour Code Program%
%Displays all 255 colours%
View.Set ("graphics:max;max, nobuttonbar,title:Colour Codes)")
var x, y, RADIUS: int :=0
RADIUS := 100
%Auto-adjusts radius size to screen
loop
if RADIUS*RADIUS*2 > maxx or RADIUS*RADIUS*2 > maxy then
RADIUS -=1
end if
exit when RADIUS*RADIUS*2 < maxx or RADIUS*RADIUS*2 < maxy
end loop
x:=0 + RADIUS
y:=maxy - RADIUS
%Draws circles and places number
for i:0..maxcolor
color(i)
Draw.FillOval (x, y, RADIUS, RADIUS, i)
locatexy (x, y)
color (black)
put (i)
if x = (maxx - RADIUS * 3) or x > (maxx - RADIUS * 3) then
y:= y - RADIUS*2
x:=0 + RADIUS
else
x:=x + RADIUS*2
end if
end for |
|
|
|
|
|
|
prdukt
|
Posted: Mon May 23, 2005 7:59 pm Post subject: (No subject) |
|
|
Nice Work |
|
|
|
|
|
Jorbalax
|
Posted: Wed Jun 01, 2005 5:27 pm Post subject: (No subject) |
|
|
Ah, I've been busy. Let's start with my newer, MUCH better, color grid.
---Colour Grid V2---
Again, uses whatdotcolor to determine color, so some values will return the same (7 and 248, for example).
code: |
%Colour Grid V2%
%By Jorbalax%
View.Set ("graphics:max;max, nobuttonbar, title:Color Grid V2")
const BOXSIZE := 20 %Determine size of color boxes
var x, y, button : int %Mouse variables
var cx, cy, clr : int
%start locations%
cx := 30
cy := maxy - 30
%create grid
for i : 0 .. 255
drawfillbox (cx - BOXSIZE, cy - BOXSIZE, cx + BOXSIZE, cy + BOXSIZE, i)
cx += BOXSIZE * 2 + 5
if cx + BOXSIZE >= maxx then
cx := 30
cy -= BOXSIZE * 2 + 5
end if
end for
%determine color
loop
Mouse.Where (x, y, button)
clr := whatdotcolor (x, y)
locatexy (maxx div 2, cy - 50)
put clr
delay (50)
end loop
|
---Record and Array Example---
A simple program that takes the age and name of members of a population. It then asks the user to select any age, and outputs the names of the individuals who are that age.
code: | %Record and Array Example%
%By Jorbalax%
var AgeEntered : int :=0
var Population : int := 0
put "Enter the population amount."
get Population
%Create an array of a record. The record contains the element's "name" and "age"
var NameAge : array 1..Population of
record
name : string (20)
age : int
end record
%retrieve the data for the elements of the array
for i : 1..Population
put "Enter Name:"..
get NameAge (i).name
put "Enter Age:"..
get NameAge (i).age
put " "
end for
%Takes an age
put "Enter an age."
get AgeEntered
%Outputs the names of people in the population who are that age
for i : 1..Population
if NameAge (i).age = AgeEntered then
put NameAge (i).name
end if
end for
|
I have some more at school, I'll post them tomorrow. |
|
|
|
|
|
|
|