DisplayMode()

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

DisplayMode()

Post by MrMonday »

Päätin pitkästä aikaa taas yrittää koodailla jotain cbllä, ja parin tunnin sähellyksen tuloksena sainkin jotain aikaiseksi.
Systeemin tarkoituksena on siis tehdä valikko josta voi valita näyttötilan. Funktiolla "DisplayMode()" luodaan uusi vaihtoehto, jonka parametreiksi tulee ikkunan leveys, korkeus ja "syvyyvs", tarkoittaen siis värisyvyyttä..
Ja mikäli näyttö ei kyseistä vaihtoehtoa tue, niin sitä ei valittavaksi edes tarjota.

Valittu näyttötila tallennetaan tiedostoon, jonka olemassaolon ohjelma aina alussa tarkistaa.
Mikäli tiedosto löytyy, luetaan sieltä jo entuudestaan valittu näyttötila ja asetetaan se nykyiseksi näyttötilaksi, ilman että käyttäjän tarvitsisi joka kerta valita sitä erikseen.

Pahoittelen että koodinpätkä on aika hirveää katseltavaa enkä englantiakaan juuri osaa kuin lukea, että virheitä voi löytyä..

Tätä ei todellakaan ole toteutettu parhaalla mahdollisella tavalla, joten jokainen osaava saa parannella tätä ja mielellään myös jakaa sen täällä :)

Code: Select all

// Asetetaan muuttujat "TextX" ja "TextY" globaaleiksi.

Global TextX,TextY

// Tarkistetaan onko tiedostoa "DisplayMode.dat" olemassa, ja jos on
// niin luetaan tiedot.

        If FileExists("DisplayMode.dat") Then
            DM = OpenToRead("DisplayMode.dat")
                Screen_Width = ReadLine(DM)
                Screen_Height = ReadLine(DM)
                Screen_Depth = ReadLine(DM)
            CloseFile DM
        EndIf
        
// Siltä varalta että tiedostossa olisi jotain näyttötilaksi sopimattomia arvoja, varmistetaan
// arvojen sopivuus. Mikäli arvot ovat käypiä, niin hypätään kohtaan "Main".
// Jos arvot eivät käyneet, niin hypätään kohtaan ChooseDisplayMode, ja valitaan toimiva näyttötila.        
        
        If GFXModeExists(Screen_Width,Screen_Height,Screen_Depth) Then
            Goto Main
        Else 
            Goto ChooseDisplayMode 
        End If

// Main.

Main:

    DM = OpenToRead("DisplayMode.dat")
        Screen_Width = ReadLine(DM)
        Screen_Height = ReadLine(DM)
        Screen_Depth = ReadLine(DM)
    CloseFile DM

        SCREEN Screen_Width,Screen_Height,Screen_Depth

// Tässä välissä sitten median lataus.
// esim. Gosub LoadMedia (Kiitos huomautuksesta MaGetzUbille  :D)

    Repeat
        ClearText
        AddText "Valitse uusi näyttötila"
        If MouseX() > TextX And MouseX() < TextX+TextWidth("Valitse uusi näyttötila") And MouseY() > TextY And MouseY() < TextY + TextHeight("Valitse uusi näyttötila") And MouseHit(1) Then Goto ChooseDisplayMode
        DrawScreen
    Until KeyHit(1)
    
// "Valitse näyttötila"-silmukka.

ChooseDisplayMode:

    ClearMouse
    
        Repeat
        
            TextY = 0
            ClearText
        
                If DisplayMode(640,480,32) Then Goto Main
                If DisplayMode(800,600,32) Then Goto Main
                If DisplayMode(1024,768,32) Then Goto Main
                If DisplayMode(1280,960,32) Then Goto Main
                If DisplayMode(1280,1024,32) Then Goto Main
                If DisplayMode(1600,1200,32) Then Goto Main
                If DisplayMode(1920,720,32) Then Goto Main
                If DisplayMode(1920,1080,32) Then Goto Main
        
            DrawScreen
            
        Until KeyHit(1)

// Tässä itse funktio.

Function DisplayMode(Screen_Width, Screen_Height, Screen_Depth)
// Tarkistaa tukeeko näyttö annetuilla parametreillä tehtyä ikkunaa.
    If GFXModeExists(Screen_Width,Screen_Height,Screen_Depth) Then
// Jos näyttö tukee, niin tehdään siitä vaihtoehto.    
            Locate TextX, TextY
                AddText Screen_Width+"*"+Screen_Height+"*"+Screen_Depth
// Jos hiiren vasemmalla painikkeella klikataan vaihtoehtoa, asetetaan se näyttötilaksi.
                    If MouseX() > TextX And MouseX() < TextX+TextWidth(""+Screen_Width+"*"+Screen_Height+"*"+Screen_Depth) And MouseY() > TextY And MouseY() < TextY + TextHeight(""+Screen_Width+"*"+Screen_Height+"*"+Screen_Depth) And MouseHit(1) Then
                        TextY = 0
                        
                    SCREEN Screen_Width,Screen_Height,Screen_Depth
// Kirjoitetaan tiedostoon valinta ylös, jottei näyttötilaa tarvitse joka kerta valita uudelleen.                  
                    DM = OpenToWrite("DisplayMode.dat")
                        WriteLine DM, ScreenWidth()
                        WriteLine DM, ScreenHeight()
                        WriteLine DM, ScreenDepth()
                    CloseFile DM
                    
                        Return 1
                    EndIf                                 
        TextY = TextY + TextHeight("I")
    End If
End Function
Tällaisille vapaasti käytettäville koodinpätkille ei taida olla mitään omaa ketjua, (mikä voisi olla ihan hyvä..)
niin katsoin fiksuimmaksi tehdä tälle sitten ihan oman, mutta jos vallan omaavat keksivät tälle paremman paikan, niin siirtäkää ihmeessä :)
EDIT:

Poistin spoiler-tagit..

EDIT:

..ja kusin viestin muokkauksen postaamalla muokatun viestin uudelleen..

Last edited by MrMonday on Tue Dec 07, 2010 5:44 am, edited 2 times in total.
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: DisplayMode()

Post by MaGetzUb »

Grafiikka pitää muistaa sitten ladata esim aliohjelmassa, koska CBhän tuhoaa grafiikat muistista kun näyttötilaa vaihdetaan. :)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: DisplayMode()

Post by MrMonday »

MaGetzUb wrote:Grafiikka pitää muistaa sitten ladata esim aliohjelmassa, koska CBhän tuhoaa grafiikat muistista kun näyttötilaa vaihdetaan. :)
Hyvä huomio, eipä tullut itselleni mieleenkään, mutta lisäsin kommentin kohtaan, jossa mediat kuuluisi ladata :)
Post Reply