Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 "New Windows Screensaver" V2
Index -> Programming, Turing -> Turing Submissions
View previous topic Printable versionDownload TopicRate TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
Windsurfer




PostPosted: Wed Jul 05, 2006 7:57 pm   Post subject: "New Windows Screensaver" V2

Okay, here's the newer "version" of that screensaver that can be found here http://www.compsci.ca/v2/viewtopic.php?t=13089
I decided to put it in a new topic because it's changed so much. I've added another 70 lines to the original 100. Left and right click to change the speeds. Admittedly, there are still some graphical glitches, but i think that's mostly due to the fact that it is not actually 3D in nature (or at least didn't start off that way... maybe it is? some help on the defanition?)

EDIT:
The stars follow the mouse. Laughing

code:

%Created by Adam Bielinski
%Just a simple program that imitates the windows screensaver
%it looks better, and the center is at the mouse, and not the center of the screen



%if you want, you can change these two variables to resize the effective screen
const X_SCREEN := 1024
const Y_SCREEN := 768

View.Set ("noecho")
View.Set ("nobuttonbar")
View.Set ("title:Stars 3D by Adam Bielinski")
Mouse.ButtonChoose ("multibutton")

View.Set ("graphics:" + intstr (X_SCREEN) + ";" + intstr (Y_SCREEN))
View.Set ("position:centre,middle")
View.Set ("offscreenonly")
Draw.FillBox (-10, -10, X_SCREEN, Y_SCREEN, black)


%number of stars. if you're getting a slowdown, decrease this
const NUM_STARS := 400

%speed ratio of the stars... this should be modified in conjuction with STAR_LIFE
%... i think the relationship is about right... linear seems right
var star_absolute_speed : real := 0.4 %this is only a starting value
const MAX_ABSOLUTE_SPEED := 50 %max speed


%how relatively big the stars are
const STAR_SIZE := 6

%how fast the stars fly away fromt the center
const STAR_ACC := 0.1

const SMALL_STAR_COLOR := 17 %should be between 16 and 31

%increase this number to make the "lag" on the mouse increase
const MOUSE_SMOOTHING := 5

%how fast the mouse can accelerate the user
const MOUSE_ACC := 0.03


type point_type :
    record
        x : real
        y : real
        life : real
    end record
var stars : array 1 .. NUM_STARS of point_type
var old_stars : array 1 .. NUM_STARS of point_type

%this is the initialatation stuff. It just puts them around on the screen at random
for lp : 1 .. NUM_STARS
    stars (lp).x := Rand.Int (1, X_SCREEN)
    stars (lp).y := Rand.Int (1, Y_SCREEN)
    stars (lp).life := 0
end for
old_stars := stars


procedure DrawStar (x1, y1, x2, y2, life : real)

    %sinxe the shades of gray are nubmers 16 to 31, this finds the color that is needed for the first oval
    const temp_clr := round ((life) mod 15 + 16)
    const temp_size := floor (life / 15)

    %this makes sure the star is visible
    if temp_size < 1 and temp_clr < SMALL_STAR_COLOR then
        Draw.Line (round (x1), round (y1), round (x2), round (y2), SMALL_STAR_COLOR)

    else
        %this oval is the oval that makes the change in size smooth
        %it does this by being a shade of gray that makes the other oval appear slightly larger
        Draw.ThickLine (round (x1), round (y1), round (x2), round (y2),
            temp_size + 1, temp_clr)
    end if
    if temp_size >= 1 then
        Draw.ThickLine (round (x1), round (y1), round (x2), round (y2),
            temp_size, white)
    end if

end DrawStar

var temp_string : string := ""
temp_string := "Click Here"
var font : int := Font.New ("Times:28")
%this waits for the user to click... it jsut has "click here" so that the effect is more impressive
Font.Draw (temp_string, X_SCREEN div 2 - Font.Width (temp_string, font) div 2, Y_SCREEN div 2, font, white)

temp_string := "click the mosue to change speeds"
Font.Draw (temp_string, X_SCREEN div 2 - Font.Width (temp_string, font) div 2, Y_SCREEN div 2 - 100, font, white)
View.Update
loop
    exit when Mouse.ButtonMoved ("downup")
end loop

var mouse_x, mouse_y, button : int := 0
var old_mouse_x, old_mouse_y : real := 0 %this is the blue dot... where the stars really fly from

var last_time : real := Time.Elapsed
loop
    Mouse.Where (mouse_x, mouse_y, button)

    if button = 1 then %if user clicks left, speed up
        star_absolute_speed *= 1 + MOUSE_ACC
    elsif button = 100 then %if user clicks right, slow down
        star_absolute_speed *= 1 - MOUSE_ACC
    end if

    %if speed is too great, slow down
    if star_absolute_speed > MAX_ABSOLUTE_SPEED then
        star_absolute_speed := MAX_ABSOLUTE_SPEED
    end if


    %how fast the stars grow in size
    %this is the equation used... not really sure why this is it. I got this from trial and error
    const STAR_LIFE := (1 + star_absolute_speed / 10) ** 0.1
    %I will be replacing the literals with constants

    old_mouse_x := (old_mouse_x * (MOUSE_SMOOTHING - 1) + mouse_x) / MOUSE_SMOOTHING
    old_mouse_y := (old_mouse_y * (MOUSE_SMOOTHING - 1) + mouse_y) / MOUSE_SMOOTHING
    drawdot (round (old_mouse_x), round (old_mouse_y), brightblue)
    for lp : 1 .. NUM_STARS
        %this stuff moves the stars
        stars (lp).x := (stars (lp).x - old_mouse_x) *
            (stars (lp).life * STAR_ACC * star_absolute_speed + 1) + old_mouse_x

        stars (lp).y := (stars (lp).y - old_mouse_y) *
            (stars (lp).life * STAR_ACC * star_absolute_speed + 1) + old_mouse_y

        %this increases the star's "life"
        stars (lp).life := (stars (lp).life + 1) * STAR_LIFE - 1

        %this draws the star
        DrawStar (stars (lp).x, stars (lp).y, old_stars (lp).x, old_stars (lp).y, (stars (lp).life * STAR_SIZE) ** 2)



        %if the star is outside the screen, reinitialize it
        if stars (lp).x < 0 or stars (lp).x > X_SCREEN or stars (lp).y < 0 or stars (lp).y > Y_SCREEN then
            stars (lp).x := Rand.Real * X_SCREEN
            stars (lp).y := Rand.Real * Y_SCREEN
            stars (lp).life := 0
        end if
    end for

    %make the trailing edge become equal to the old star values
    old_stars := stars

    View.Update
    %drawfillbox (-10, -10, X_SCREEN, Y_SCREEN, black) %erase the screen

    %This is a cool alternative to drawfillbox
    for lp : 1 .. 400      %this number tells how fast the backround is erased (num of lines)
        drawline (Rand.Int (1, X_SCREEN) * 2 - X_SCREEN div 2, Rand.Int (1, Y_SCREEN) * 2 - Y_SCREEN div 2,
            Rand.Int (1, X_SCREEN) * 2 - X_SCREEN div 2,
            Rand.Int (1, Y_SCREEN) * 2 - Y_SCREEN div 2, black)
    end for

    %this section controls the timing of the program
    loop
        exit when Time.Elapsed - last_time > 30 %wait for the time
    end loop
    last_time := Time.Elapsed
end loop
[/b]
Sponsor
Sponsor
Sponsor
sponsor
HellblazerX




PostPosted: Wed Jul 05, 2006 8:24 pm   Post subject: (No subject)

Very nice! It makes me feel like I was in a spaceship or something Very Happy . I like how you can change the speed of the stars, so it looks like your moving faster. Btw, you should mentioned that the stars follow the mouse, cuz that's a very cool effect as well.

+25 bits for you!
jamonathin




PostPosted: Fri Jul 07, 2006 11:21 am   Post subject: (No subject)

Pretty cool. I wouldn't really consider it a screensaver - considering the definition of a screensaver implies that the user is not at the computer/not using it - where the mouse would disbale the screensaver. But nonetheless, cool.

I just try to see how big i can make the star, my best is about 200 pixels diameter (guess).

Keep up the good work.
aldreneo




PostPosted: Fri Jul 07, 2006 6:51 pm   Post subject: (No subject)

Full screen
No mouse
Auto movement simulating the movement of the mouse
No click at start

Then it will be a screensaver
Windsurfer




PostPosted: Fri Jul 07, 2006 7:47 pm   Post subject: *Rolls eyes*

Thanks for the feedback! i'm Glad you liked it! Very Happy

About this: Confused

aldreneo wrote:
Full screen
No mouse
Auto movement simulating the movement of the mouse
No click at start

Then it will be a screensaver


I know Thhaaaaaat. It was meant to be a joke. Evidently, some people missed that. They may have also forgotten:
1. Turing can't hide the mouse
2. Turing can't go fullscreen.

So nothing made in turing can be a true screen saver. Evil or Very Mad

And by the way, thanks for all the comments on my coding. Laughing
Slaivis




PostPosted: Sat Jul 08, 2006 12:49 am   Post subject: (No subject)

Wow! Holy crap! This is pertty much the effect I was looking for for my program! (The one I posted about...)



+38 bits. (That's all of them for now, besides, I think that you deserve them.)
Display posts from previous:   
   Index -> Programming, Turing -> Turing Submissions
View previous topic Tell A FriendPrintable versionDownload TopicRate TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 6 Posts ]
Jump to:   


Style:  
Search: