Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Figur, Symbol erstellen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
jbaben



Anmeldungsdatum: 30.10.2017
Beiträge: 3
Wohnort: SA-Nelspruit

BeitragVerfasst am: 30.10.2017, 16:10    Titel: Figur, Symbol erstellen Antworten mit Zitat

Hallo,

für mein aktuelles Projekt (Wahrnehmungs-Spiel) benötige ich eine Figur zum Anzeigen und anschließend 6 weitere Figuren um aus diesen Figuren die erste angezeigte Figur auszuwählen.
In meinem Programm (erstellt vor ca. 35 Jahren) habe ich folgenden Zahlencode verwendet: Chr$(131, 140, 143, 176, 179, 188, 191)
Dieser Zahlencode erzeugte, so weit ich mich erinnere, verschiedene Rechtecke, aus denen dann die verschiedenen Figuren zusammen gesetzt wurden.
Jetzt erzeugt der Zahlencode (ASCII-Zeichen) Symbole aus denen ich keine vernüftige Figur erstellen kann.
Wie könnte ich unter FreeBasic eine Figur z.B aus verschiedenen Rechtecken erzeugen ?

MfG

Juergen B.
_________________
z.Z. FreeBASIC unter WINDOWS 10 Pro 64 Bit
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 30.10.2017, 21:58    Titel: Antworten mit Zitat

Das Problem ist, dass die dargestellten Zeichen für ANSI-Zeichen > 127 vom eingestellten Zeichensatz abhängen. Im Konsolenmodus ist das abhängig von der Konsoleneinstellung; ich kann keine Garantie darauf geben, dass diese unter Windows immer gleich ist (Linux verwendet, im Gegensatz zu Windows, in der Regel UTF8). Im Grafikfenster verwendet FreeBASIC eine andere ANSI-Codierung, diese ist dafür immer dieselbe (CP437). Hier hast du ein Programm zum Anzeigen der Zeichen:

https://www.freebasic-portal.de/code-beispiele/kleine-helferlein/ascii-tabelle-anzeigen-lassen-2.html

Aber mit den Grafikbefehlen wäre man sehr viel flexibler als mit Schrift-Rahmenzeichen. lächeln
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jbaben



Anmeldungsdatum: 30.10.2017
Beiträge: 3
Wohnort: SA-Nelspruit

BeitragVerfasst am: 31.10.2017, 15:44    Titel: Antworten mit Zitat

Hallo,

vielen Dank für die Antwort.
Ich werde mich jetzt mal mit den Grafikbefehlen beschäftigen.

MfG

Juergen B.
_________________
z.Z. FreeBASIC unter WINDOWS 10 Pro 64 Bit
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 31.10.2017, 17:09    Titel: Abbildungen als Bilddatei laden Antworten mit Zitat

Hi Jürgen,

willkommen im Forum! lächeln

In FreeBASIC kannst du auch einfach externe Bitmaps laden. Von daher müsstest du gar nicht mehr mit "ASCII-Art" zeichnen, sondern könntest mit einem beliebigen Bildbearbeitungsprogramm irgendwelche Formen zeichnen.

Hier mal ein (sicher nicht optimiertes) 5-Minuten-Beispiel:
Code:
Function max( a as double, b as double ) as double
    If ( a > b ) Then
        Return a
    ElseIf ( a < b ) Then
        Return b
    End If
    Return a
End Function


Const PI As Double = 3.14159265359

ScreenRes 800, 600, 24, 2

Dim As Any Ptr bild
bild = ImageCreate(100, 100)  'Pixelgroesse des Bildes
BLoad ExePath + "\sonne.bmp", bild

Dim As Integer x, y
Dim As Double r=0, g=0, b=0

Dim as Double stepR = 176/400.0#, _
              stepG = 224/400.0#, _
              stepB = 244/400.0#

For x As Integer = 0 To 800

    y = 600 - sin( x/700.0#*PI ) * 600
   
    ScreenSet 2, 1
    Line (0,0)-(799,599), RGB(Int(r),Int(g),Int(b)), BF
    PUT (x, y), bild, TRANS
    ScreenSet 1, 1
    ScreenSync
    Flip 2, 1
    If ( x <= 399 ) Then
        r += stepR
        g += stepG
        b += stepB
    Else
        r = Max( r-stepR, 0 )
        g = Max( g-stepG, 0 )
        b = Max( b-stepB, 0 )
    End if
   
    Sleep 1
   
Next

end 0


Die Bilddatei "sonne.bmp" bitte im gleichen Verzeichnis speichern wie den Quelltext:
https://www.freebasic-portal.de/sst/sonne.bmp
Das Rosa ist die standardmäßige Maskenfarbe, d. h. wenn man bei PUT TRANS verwendet, werden die rosanen Bereiche transparent.

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jbaben



Anmeldungsdatum: 30.10.2017
Beiträge: 3
Wohnort: SA-Nelspruit

BeitragVerfasst am: 31.10.2017, 17:10    Titel: Antworten mit Zitat

Hallo,

zu den Grafikbefehlen habe ich folgende Frage:
Wenn ich zum Beispiel mit:
Code:

LINE (140, 140)-(150,200), 0, BF

ein Rechteck erzeuge, wird diese ja direkt angezeigt.
Wie genau lautet die Syntax wenn ich das Rechteck z.B. als Figur(1) speichern möchte ?

MfG

Juergen B.
_________________
z.Z. FreeBASIC unter WINDOWS 10 Pro 64 Bit
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 31.10.2017, 18:43    Titel: Antworten mit Zitat

Du kannst mit IMAGECREATE einen Bildpuffer erstellen und dann direkt in diesen hineinzeichnen.

Code:
#include once "fbgfx.bi"                                   ' für das UDT FB.Image
screenres 800, 600, 32                                     ' 32-Bit-Farbmodus
dim as FB.Image ptr Figur(5)
Figur(1) = imagecreate(200, 200, 0)                        ' Bildspeicher reservieren

line Figur(1), (140, 140)-(150,200), rgb(255, 0, 0), BF    ' in den Bildpuffer speichern
put (200, 200), Figur(1)                                   ' Bildpuffer anzeigen
imagedestroy Figur(1)                                      ' Speicherplatz freigeben

sleep

Weil schwarzes Rechteck auf schwarzem Grund jetzt schlicht aussah, habe ich als Farbe Rot genommen; da sieht man dann auch gleich mal den 32-Bit-Farbraum.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz