Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Rekomendowane odpowiedzi

Opublikowano

Ok mam parę pytań co do tcp/ip.

Chcę zrobić komunikator z dwoma funkcjami: czat(ze znakami jak całki itd. ale z tym sobie razej poradzę) ,oraz graficzny czat w czasie rzeczywistym(rusuje cos na tablicy i koles to widzi, wiem ze to moze byc cholernie trudne), ale napotkalem pewne problemy. Chcę aby działało to na hamachi - czyli nalezymy do jednej sieci wiec w porzadku jest ale jak ma wygladac serwer i klient? Chce zeby jeden ktos stawial serwer a dwa clienty mogly sie podlaczyc.

 

1.Wiec serwer ma odbierac od Rozmowcy1 polecenia i przekazywac je do Rozmowcy 2 i spowrotem?

2. Jesli serwer ma obslugiwac dwa rozne IP to IP z ktorym ma sie laczyc serwer ma byc 127.0.0.1?

Opublikowano

serwer to serwer , a łączy się do serwera klient i to on musi znać IP serwera i to nie lokalny jak podałeś tylko fizyczny jaki ma komputer

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

Ale jakiego IP ma nasluchiwac serwer? Chodzi mi o funkcje TCPListen ($ip, $port, $max) w przypadku gdy jestem laczony przez hamachi

Obczajone :)

 

A teraz ma ktoś może pomysł na rysowanie w czasie rzeczywistym?:)

Opublikowano

W AutoIt na pewno nie zrobisz tego tak, żeby rysowały Ci się kropeczki :) Ja pisząc Kalambury do gry w szkole przez LAN'a (C++ ,Allegro, WinSock) rysowanie zrobiłem jako łączenie ostatniego punktu w którym była myszka z punktem w którym jest teraz. I do tego sprawdzając czy przycisk był już wciśnięty. Działa to całkiem nieźle, bo przy 30 spr na sekundę koła nie są bardzo kwadratowe, a na super dokładności mi nie zależało, bo i tak dane były wysyłane do serwera i z niego do pozostałych klientów, więc nie mogło ich być nie wiadomo ile.

 

#EDIT

Mniej więcej tak to wygląda (składnia autoit):

 

Dim $colorList[10] = [0x000000, 0xFF0000, 0x00FF00, 0x0000FF, 0xb43ad2, 0xFFF000, 0xffa800, 0xd5d5d5, 0xff00ff, 0x00ffe];tablica z kolorami
$color = 0;aktualny kolor z tabeli wyżej
$MClick = False;czy jest wciśniety LPM
$pisak = True;czy rysuje pisakiem czy maże gumką
Dim $last[2];ostatnie pozycje myszki

While True
If (nacisniesz_LPM) Then;jesli nacisniesz LPM
If ($mouse_x >= 5 And $mouse_x <= 605 And $mouse_y >= 5 And $mouse_y <= 505) Then;pole do rysowania ma wymiary 600x500 i jest na pozycjach (5,5)
If ($MClick || $key[KEY_LCONTROL]) Then;jeśli już jest wciśnięty LPM lub jest wciśnięty L control (do rysowania prostych linii)
If ($pisak) Then;jesli rysuje pisakiem
line($drawArea, $mouse_x - 5, $mouse_y - 5, $last[0] - 5, $last[1] - 5, $colorList[$color]);rysuje na bitmapie drawArea na podanych pozycjach linie o kolorze z tabeli
;teraz dodaje do tabeli struktur pozycje myszy i kolor i potem jak tablica jest pełna (albo minie 2 sek), to ją wysyła do serwera 
Else
rectfill($drawArea, $mouse_x - 15 - 5, $mouse_y - 15 - 5, $mouse_x + 15 - 5, $mouse_y + 15 - 5, 0xFFFFFF);rysuje biały kwadrat w miejscu myszki
;dodaje go też do tablicy
EndIf
;zmienia stare pozycje myszy
$last[0] = $mouse_x
$last[1] = $mouse_y
Else
;najpierw zmienia stare pozycje myszy
$last[0] = $mouse_x
$last[1] = $mouse_y
If ($pisak) Then

line($drawArea, $mouse_x - 5, $mouse_y - 5, $last[0] - 5, $last[1] - 5, $colorList[$color]);rysuje na bitmapie drawArea na podanych pozycjach linie o kolorze z tabeli
;teraz dodaje do tabeli struktur pozycje myszy i kolor i potem jak tablica jest pełna (albo minie 2 sek), to ją wysyła do serwera 
Else
rectfill($drawArea, $mouse_x - 15 - 5, $mouse_y - 15 - 5, $mouse_x + 15 - 5, $mouse_y + 15 - 5, 0xFFFFFF);rysuje biały kwadrat w miejscu myszki
;dodaje go też do tablicy
EndIf
EndIf
Else
;tutaj tez zmienia te pozycje (to chyba było do tego, jak wyjedzie poza bitmapę do rysowania)
$last[0] = $mouse_x
$last[1] = $mouse_y
EndIf
EndIf
WEnd

 

Tutaj masz z wcięciami http://wklej.to/z5bEV

Opublikowano

Dzięki Hfaua :)

Pewnie tego trzeba zrezygnować :P Ale mam jedno pytanie jeszcze: jak ustalić czcionkę dla tylko jednego znaku w tekście ?:P

Bo musze zrobić całkę no i wiadomo ASCII to jest 254, zamieniam go na czcionke symbol - tylko wtedy caly tekst staje sie nie zrozumialy a mi zalezy na pojedynczej calce :P

Opublikowano

A próbowałeś wkleić do tekstu po prostu ∫?

 

Czemu z tego rezygnujesz? Jak odpowiednio zoptymalizujesz to rysowanie, to nawet w au3 Ci się może udać :)

Opublikowano
Opublikowano

Ok może mnie oświecisz inaczej: mam pewne pole Edit . W nim zawarte znaki jako string, jak mam użyć np. dla 'a' innej czcionki a dla 'c' w tekscie innej?:P

Opublikowano
#include <guirichedit.au3>

$hGUI = GUICreate("gui", 100, 100)
GUISetState()
$edit = _GUICtrlRichEdit_Create($hGUI, "", 2, 2, 96, 96)
_GUICtrlRichEdit_AppendText($edit, "siema")
_GUICtrlRichEdit_SetFont($edit, 15, "Tahoma")
_GUICtrlRichEdit_AppendText($edit, "Jestem hfaua")

Do
Until GUIGetMsg() = -3

Opublikowano

Ok czat mam i sprawdza się dobrze

 

:) Teraz stworzyłem dwa pola 10x10 o kwadratach szerokosc 50 pikseli. Jak klikam jeden to sie zaznacza na inny kolor i w tablicy zostaje mu przypisana wartość 1. Jak nie pokolorowany to wartość 0. Teraz jako,że czat działa na tcp i wszystko co przejdze przez tcp jest wyswietlane w czacie wiec 100 jedynek i zer co 2 sekundy to nie za dobre...nie wiem jak rozwiazac ten problem ...

Moze czat na udp? Tylko jak tam wygladac powinien wygladac serwer i klient? Na forum nie znalazlem nic o udp :)

Ok więc to wygląda tak:

 

 


#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 625, 443, 192, 124, BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_SYSMENU, $WS_CAPTION, $WS_OVERLAPPEDWINDOW, $WS_TILEDWINDOW, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_TABSTOP, $WS_BORDER, $WS_CLIPSIBLINGS))
$save = GUICtrlCreateButton("save", 0, 420, 75)
$open = GUICtrlCreateButton("open", 80, 420, 75)

GUISetState(@SW_SHOW)
Dim $array[(10 * 10) + 1][2]
$c = 0
For $h = 1 To 10
For $w = 1 To 10
$array[$c][0] = GUICtrlCreateLabel("", $w * 25+20, $h * 25+40, 25, 25)
$array[$c][1] = 0xffffff
$c += 1
GUICtrlSetBkColor(-1, 0xff0000)
Next
Next


Dim $array2[(10 * 10) + 1][2]
$c2 = 0
For $h2 = 1 To 10
For $w2 = 1 To 10
$array2[$c2][0] = GUICtrlCreateLabel("", $w2 * 25+320, $h2 * 25+40, 25, 25)
$array2[$c2][1] = 0xc000
$c2 += 1
GUICtrlSetBkColor(-1, 0xc000)
Next
Next

UDPStartup()
$socket=UDPOpen("5.189.104.218",1222)
$socket2=UDPBind("5.189.104.218",1222)


AdlibRegister("udpserwer",1000)
AdlibRegister("udpklient",1000)

#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
$stepuput = False
If $nMsg > 4 And $nMsg < UBound($array) + 4 Then
$nMsg -= 5
If $array[$nMsg][1] = 0 Then
GUICtrlSetBkColor($array[$nMsg][0], 0xffffff)
$array[$nMsg][1] = 0xffffff
$stepuput = True
Else
GUICtrlSetBkColor($array[$nMsg][0], 0)
$array[$nMsg][1] = 0
$stepuput = True
EndIf
EndIf

If Not $stepuput Then
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $save
$str = ""
For $i = 0 To UBound($array) - 1
$tmp = $array[$i][1]
If $tmp = 0 Then
$tmp = "0"
Else
$tmp = "1"
EndIf ;==>
ConsoleWrite($tmp)
$str &= $tmp
Next
FileDelete(@ScriptDir & "\image.txt")
FileWrite(@ScriptDir & "\image.txt", $str)
Case $open
$a = StringSplit(FileRead(@ScriptDir & "\image.txt"), "")
For $n = 1 To $a[0]
$color = $a[$n]
If $color = 0 Then
$array[$n - 1][1] = 0
GUICtrlSetBkColor($array[$n - 1][0], 0)
Else
$array[$n - 1][1] = 0xffffff
GUICtrlSetBkColor($array[$n - 1][0], 0xffffff)
EndIf
Next
EndSwitch
EndIf ;==>
WEnd


func udpserwer()
$odebrane=UDPRecv($socket2,1000)
for $i=0 to 100 step 1
if $odebrane=1 Then
GUICtrlSetBkColor($array2[$i][0], 0xc1111)
EndIf
if $odebrane=0 Then
GUICtrlSetBkColor($array2[$i][0], 0xd1111)
EndIf
Next
$i=0
EndFunc

func udpklient()
$str = ""
For $i = 0 To UBound($array) - 1
$tmp = $array[$i][1]
If $tmp = 0 Then
$tmp = "0"
Else
$tmp = "1"
EndIf ;==>
UDPSend($socket,$tmp)
$str &= $tmp
Next

EndFunc

 

 

 

Może ktoś powiedzieć co mam źle w funckcjach ostatnich dwóch i czemu to nei działa?

Opublikowano

Czat zrobiłem na tcp właśnie z tamtego Protecto :)

Tylko teraz wymiana danych z tymi tablicami czyli zaznaczaniem pol 10x10 po lewej i zeby to pojawilo sie u kolesia ;p

Opublikowano

Ok pokombinuje potem, teraz wziałem się za prace na konkurs , dzięki za pomoc póki co :)

Protecto nie zamykaj jeszcze, wrócę do tego po konkursie :)

Opublikowano
1.Wiec serwer ma odbierac od Rozmowcy1 polecenia i przekazywac je do Rozmowcy 2 i spowrotem?

 

Mam taki kodzik u siebie na stanie ^^

Klient 1 <--> Serwer <--> Klient 2

 

Napisany jest prosty protokół, wszystko ładnie śmiga =D

Opublikowano

Jeśli będzie wysyłał rysowanie punkt po punkcie, to mu AutoIt nie uciągnie tego. Najlepiej rysować linie z ostatniego położenia myszki do obecnego (oczywiście, jeśli jest dalej wciśnięty LPM)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...