Seite 2 von 2

Re: Konsole im Vollbildmodus

Verfasst: 29.01.2018 18:00
von RSBasic
Wie ich schon dachte, verwendest du Windows 7. Das ist nicht möglich. Du kannst, wie Derren vorgeschlagen hat, selber mit CanvasGadget machen.

Re: Konsole im Vollbildmodus

Verfasst: 30.01.2018 01:42
von udg
Du kannst doch vor dem Start die desktop Auflösung auslesen und das dos fenster entsprechend der größe erstellen.
Mode con coils=Fensterbreite als Wert Lines=Fensterhöhe als Wert

aber ich glaube damit kann man nichts in das command fenster übergeben.

wäre sowas wie:

Code: Alles auswählen

RunProgram("cmd.exe", " MODE CON COLS=999 LINES=999", "")

dann hab ich sogar hier aufm 4K Monitor eine Fullscreen Console

getestet mit Windows 7

Usw.

Re: Konsole im Vollbildmodus

Verfasst: 01.02.2018 13:22
von Hyper
Ich habe das Programm unter Windows 10 auf einem anderen PC ausprobiert, da geht das Programm von RSBasic. Das ist für mich dann die Lösung. Ich möchte keinen zusätzlichen Aufwand in den Eigenbau einer Konsole investieren (Buchstabenbreite, -höhe ausrechnen je nach Fenstergröße, etc.). Die Konsole hat alle Bildschirmbefehle, die ich brauche. Es soll wirklich wie früher nur ein Textbildschirm mit 80 x 25 Zeichen sein.

Danke Euch für die Tipps :allright:

Re: Konsole im Vollbildmodus

Verfasst: 02.02.2018 16:20
von DarkSoul
Vergiss cmd.exe - Die ist nicht wie früher!

Geht schon damit los, dass cmd heute nicht mehr die original MS-DOS-Schrift hat und endet damit, dass das Seitenverhältnis stark zum breiten hin verändert worden ist (ist eher wie der damalige 80x43 oder gar 80x50-Modus). :mrgreen:

Der Eigenbau ist nicht sehr aufwändig, wenn du es so machst:

1. Du musst dir zunächst Codepage 437 bzw. 850 besorgen. Das ist die Originalschrift von MS-DOS. (Kann sein, dass auf den Schriftarten Urheberrecht drauf ist, aber zum Testen reicht es ja erstmal. Kannste immer noch austauschen, wenn das Projekt sich weiterentwickelt) - Keine Sorge: Damals wie heute sind in Eingabeaufforderungen alle Zeichen gleich groß, so dass die komplizierte Schriftgrößenberechnung auf ein Gesamtbreite=x*Zeichenbreite
reduziert ist :mrgreen:

2. Entweder renderst du einmal alle Zeichen in DOSBox aus oder du nimmst einen Screenshot davon von Google. Das schneidest du so zurecht, dass du entweder alles in korrekter ASCII-Reihenfolge nebeneinander hast oder du ordnest es in einem Raster von 16x16 an.

3. Abspeichern als .PNG und in PB als Image laden.

4. Das PNG mit FOR-Schleifen und GrabImage() wieder zerlegen und sinnvollerweise auf den #ImageID-Bereich in richtiger Reihenfolge zwischen 0 und 255 legen. Kannst natürlich schummeln und mehr als 255 Zeichen erstellen.

5. Ein Array mit 80x25 Feldern machen. Darin speicherst du die Ascii-Codes für jede "Zelle"

6. Fenster öffnen, Ränder weg, Vollbild, Hintergrundfarbe auf Schwarz und CanvasGadget drauf. Oder du verwendest OpenScreen()

7. Baue dir mit Hilfe des CanvasGadget und dem Zeichenstatz diese uralt-BASIC-Funktionen aus DOS-Zeiten nach, dass die Bildschirmanzeige aussieht, wie in guten alten Zeiten: PRINT(), INPUT(), LOCATE(), CLS() und COLOR()

Die Default-Farben sind (die oberste Reihe):
https://upload.wikimedia.org/wikipedia/ ... rs.svg.png
Diese waren veränderbar.

Dann haste alles, was du für ein "DOS"-Spiel benötigst und es sieht auf jedem System absolut gleich aus und hat das ursprüngliche DOS-Feeling.

Hier noch zu dem alten 80x25-Screen-Modus (je nachdem, wie originalgetreu es werden soll):
- Bei 80x25 beträgt die native Auflösung (also die des CanvasGadget) 720x400 Pixel
- Ein Zeichen ist 9x16 Pixel. Die 8. und 9. Pixelspalte sind immer identisch! (war eine Sparmaßnahme, der Zeichensatz hatte intern 8x16 und die 9. Spalte wurde durch Dopplung der 8. erreicht) - Das war nur im Textmodus so. Im Grafikmodus waren die Zeichen nur 8px breit.
- Man hatte die Wahl zwischen: Entweder 16 Zeichenhintergrundfarben gleichzeitig ODER 8 Zeichenhintergrundfarben gleichzeitig (0-7), aber dafür konnte man einzelne Zeichen blinken lassen.
- 720x400 ist wahrscheinlich zu klein für heutige Bildschirme. Könntest das CanvasGadget um eine ganzzahligen Wert zoomen (z.B. alles mal 2), in die Mitte setzen und den Rest mit einem Rand auffüllen. Diesen Rand kannst du farblich dem Spiel anpassen.
- Zeichenfunktionen waren im Textmodus nicht verfügbar (nur mit Tricksereien durch Austausch bestimmter Zeichen in der Codepage). Einzelne Pixel zeichen war nicht möglich.
- Um den Mauszeiger darzustellen, hat man die Farben der betreffenden Zelle des 80x25-Rasters invertiert, auf welche die Maus gerade gezeigt hat. (es fehlten ja die Grafikfunktionen und deshalb fiel ein grafischer Pfeil ebenfalls aus)

PS: Dank DOSBox spräche nicht viel dagegen, ein echtes DOS-Spiel zu bauen. Dann hast du diese Probleme nicht. :allright:

Re: Konsole im Vollbildmodus

Verfasst: 02.02.2018 19:52
von juergenkulow
Hallo DarkSoul,

wäre diese Schnittstelle cool?

Code: Alles auswählen

; Schnittstelle für MyDos Console 
#TestDos=1

CompilerIf Defined(TestDos,#PB_Constant)
  Procedure MyDosClose() : MessageRequester("Konsole zu","fertig"):CloseConsole() :  EndProcedure
  Procedure MyDosCls() : ClearConsole() : EndProcedure
  Procedure MyDosColor(Farbe,Hintergrund) : ConsoleColor(Farbe,Hintergrund) : EndProcedure
  Procedure.s MyDosInkey() : ProcedureReturn Inkey() : EndProcedure
  Procedure.s MyDosInput() : ProcedureReturn Input() : EndProcedure
  Procedure MyDosLocate(x.i,y.i) :ConsoleLocate(x,y) : EndProcedure
  Procedure MyDosOpenConsole() : OpenConsole() : EnableGraphicalConsole(1) : EndProcedure
  Procedure MyDosPrint(Text.s) : Print(Text)   : EndProcedure
  Procedure MyDosPrintN(Text.s) : PrintN(Text)   : EndProcedure
  Procedure.i MyDosRawKey() : ProcedureReturn RawKey() : EndProcedure
CompilerElse 
  Procedure MyDosClose() :  EndProcedure
  Procedure MyDosCls() : EndProcedure
  Procedure MyDosColor(Farbe,Hintergrund)  : EndProcedure
  Procedure.s MyDosInkey() : ProcedureReturn "" : EndProcedure
  Procedure.s MyDosInput() : ProcedureReturn "" : EndProcedure
  Procedure MyDosLocate(x.i,y.i) :  EndProcedure
  Procedure MyDosOpenConsole() :  EndProcedure
  Procedure MyDosPrint(Text.s)  : EndProcedure
  Procedure MyDosPrintN(Text.s)  : EndProcedure
  Procedure.i MyDosRawKey() : ProcedureReturn $ff : EndProcedure
CompilerEndIf

Macro ClearConsole() : MyDosCls() : EndMacro
Macro CloseConsole() : MyDosClose() : EndMacro
Macro ConsoleColor(Farbe,Hintergrund) : MyDosColor(Farbe,Hintergrund) : EndMacro
Macro ConsoleLocate(x,y) : MyDosLocate(x,y) : EndMacro
Macro ConsoleTitle(Text) : EndMacro 
Macro EnableGraphicalConsole(Wert) : EndMacro
Macro Inkey() : MyDosInkey() : EndMacro
Macro Input() : MyDosInput() : EndMacro
Macro OpenConsole() : MyDosOpenConsole() : EndMacro
Macro Print (Text) : MyDOSPrint(Text) : EndMacro
Macro PrintN(Text) : MyDOSPrint(Text)   :EndMacro 
Macro RawKey() : MyDosRawKey() : EndMacro
Gruß

Re: Konsole im Vollbildmodus

Verfasst: 02.02.2018 20:50
von DarkSoul
Kommst ein bisschen spät damit.

Ich habe vor Weihnachten alle (bis auf ein bisher noch nicht auf andere Programmiersprachen gerettetes großes) PureBasic-Projekte im Papierkorb entsorgt, weil ich die letzte Zeit sehr viel Pech mit dieser Programmiersprache hatte.

Da war so ein DOS-Nachbau dabei, den ich allerdings komplett entsorgt habe. Zwei Monate früher und ihr hättet das haben können. :|

Re: Konsole im Vollbildmodus

Verfasst: 02.02.2018 20:53
von RSBasic
DarkSoul hat geschrieben:weil ich die letzte Zeit sehr viel Pech mit dieser Programmiersprache hatte.
Was z.B.?

Re: Konsole im Vollbildmodus

Verfasst: 02.02.2018 22:40
von DarkSoul
Siehe meine Threads in der Forenkategorie "Linux" and diverse alte Bugmeldungen von mir im großen Forum, die zwar anerkannt, aber bis heute nicht behoben worden sind. :wink: