View Full Version : [VB6] p_PoKer - Projecto de poker em construção
WinAce_Boy 04-08-2008, 03:12 Boas,
Estou a desenvolver um jogo de poker em vb6 para 2 jogadores jogarem em rede. A parte da comunicação entre os dois vou deixar para o fim, comecei por construir o IDE até que depois de essa parte concluída passei para o código, baralhar as 52 cartas tendo 4 naipes diferentes e 13 cartas cada um como é óbvio (52/4) e pôr a lista das cartas já baralhadas numa listbox para posteriormente ser possível jogar com elas :P como se a listbox fosse o baralho de cartas já baralhado.
Tive a testar a função Randomize e a função Rnd necessárias para a geração de números aleatórios, entre esses testes está aqui um pequeno algoritmo que gera 4 números aleatórios testando se existe algum número igual ao que vai ser gerado; se isso se verificar ele gera outro número até que sejaM diferentes dos outros todos gerados anteriormente.
Private Sub Command2_Click()
List2.Clear
For i = 1 To 4
Randomize
value = CInt(Int((4 * Rnd()) + 1))
If i = 1 Then List2.AddItem value: v(1) = value
If i = 2 Then
Do
value = CInt(Int((4 * Rnd()) + 1))
Loop While value = v(1)
List2.AddItem value
v(2) = value
End If
If i = 3 Then
Do
value = CInt(Int((4 * Rnd()) + 1))
Loop While value = v(1) Or value = v(2)
List2.AddItem value
v(3) = value
End If
If i = 4 Then
Do
value = CInt(Int((4 * Rnd()) + 1))
Loop While value = v(1) Or value = v(2) Or value = v(3)
List2.AddItem value
End If
Next i
End Sub
Questões:
1- Gostava que me me dissessem se é possível fazer as mesmas instruções do algoritmo em cima mas com menos palavras e que me explicassem por passos o mesmo algoritmo já modificado.
Vou também precisar de ajuda (mas isso é mais à frente, depois de me responderem à primeira questão) com a minha primeira dúvida - baralhar o baralho de cartas.
Só espero ter-me explicado bem e que me ajudem o mais rapidamente possível.
Obrigado desde já e Obrigado pela atenção!
Abraços para todos :)
Boas!
Antes de mais, permite-me uma correcção:
comecei por construir o IDE
Penso que queiras dizer que começaste por construir a Interface Gráfica (GUI - Graphical User Interface). Uma IDE é um ambiente - Integrated Development Environment - como o próprio Visual Studio.
Em relação ao resto do teu post, em primeiro lugar, não ponhas o Randomize logo a seguir ao For. Ele assim perde efeito ;)
Em vez disso, coloca apenas "Randomize Timer" logo no início do programa --> no Form_Load.
Quanto a baralhares as cartas, procurei no Google por "vb6 shuffle listbox" e encontrei um resultado que aconselho:
http://www.xtremevbtalk.com/showpost.php?p=883510&postcount=7
Isso é um algoritmo que "troca" quaisquer duas cartas aleatoriamente. É um método mais eficaz de fazer o baralho.
Esse post trabalha com uma array, e não com uma listbox. No entanto, deixo-te isto como um desafio para trabalhares mais um pouco ;)
Dá uma vista de olhos e depois diz qualquer coisa :)
WinAce_Boy 04-08-2008, 03:59 For C = 1 To 52
K = Int(Rnd() * 52) + 1 ' choose a random card to swap card C with
J = Deck(C)
Deck(C) = Deck(K) ' swap cards C and K
Deck(K) = J
Next
Não percebo muito bem o código, onde é que ele está a ir buscar as cartas?
a cartas estão na variavel Deck, que é um array
esse ciclo, vai trocar a carta Deck(C) (C é o contador do ciclo) por outra de indice aleatório
agora ou alteras esse código para trabalhar com uma ListBox como tu tinhas, ou fazes o contrário, e passas tu a trabalhar com um array
Exactamente :)
Esse código funciona da seguinte maneira:
faz um ciclo entre as 52 cartas, escolhe um número aleatório, e as três linhas de código seguintes limitam-se a trocar o valor da carta actual com a carta que se encontra na posição do número aleatório. Como são só trocas, os dados não são modificados, só a ordem deles.
Como está a trabalhar com uma array, é como o MPalhas disse - ou modificas o código para que ele trabalhe com uma listbox (tu consegues, só tens é de pensar um pouco ;) ), ou fazes com que o conteúdo da listbox vá para uma array.
WinAce_Boy 04-08-2008, 13:34 õk já entendi mas neste exemplo só baralha as cartas a não ser que eu na array deck ponha a carta+naipe certo?
O que esse exemplo faz é baralhar uma array. Ponto.
Se quiseres ter uma array com as 52 cartas ou 4 arrays com 13 cartas, uma array por naipe, é contigo. No entanto, acho que a forma ideal de baralhar é mesmo a array de 52 cartas (carta + naipe).
podes por exemplo declarar o array como sendo de strings, e usar desta forma:
"2e" -> corresponde ao dois de espadas
"ko" -> rei de ouros
e assim sucessivamente. depois é só criar uma função que receba essa string e retorne o valor que realmente queres (tanto o nome da carta, como o seu valor no jogo)
porque se fizesses 4 arrays, um para cada naipe, complicava mais, porque ainda tinhas que arranjar maneira de ir buscar a próxima carta escolhendo aleatoriamente um desses arrays
WinAce_Boy 04-08-2008, 14:51 e como guardo o naipe+carta dentro de um array unidimensional?
é do genero:
Carta- 4
Naipe- 1
deck(i)= i & naipe ou deck(i)= i & " " & naipe
(o naipe varia de 1 a 4)
É como quiseres. "Dois | Ouros", "2O", "2|o", "2 o"... tu fazes a organização conforme te der mais jeito. Mas é nestas situações que é sempre bom pensares primeiro no que vais fazer, para escolheres a organização que mais te convém. É só aí que está a grande diferença.
Pessoalmente, iria para 2o, já que os quatro naipes são Espadas, Copas, Paus e Ouros, não há iniciais repetidas, e os números são A234567890JQK (podemos considerar o 10 como sendo 0, e assim continuaremos com apenas um caracter para designar um número).
Ou seja, de AE a KO.
Como guardas isso tudo numa array unidimensional?
Pensa em dois ciclos e duas variáveis, uma com o valor "A234567890JQK", outra com o valor "ECPO", e algum manuseio da função Mid() :)
WinAce_Boy 04-08-2008, 15:21 Private Sub Command1_Click()
For i = 2 To 53
value = CInt(Int((52 * Rnd()) + 1))
j = Deck(i)
Deck(i) = Deck(value)
Deck(value) = j
List2.AddItem Deck(i)
Next
MsgBox List1.ListCount
MsgBox List2.ListCount
End Sub
Private Sub Form_Load()
Dim a As Integer
For j = 1 To 4
For i = 2 To 14
Deck(i) = i & " " & j
List1.AddItem Deck(i)
Next
Next
End Sub
Fiz desta maneira, está-me a dar mal, não está a baralhar bem.
porque é que na atribuição, fazes o ciclo interno entre 2 e 14? não deveria ser entre 0 e 12?
e ao atribuir não podes fazer Deck(i)=... porque a variavel i apenas varia entre 2 e 14, ou seja vais estar a altera os 13 primeiros valores 4 vezes cada.
talvez com Deck(i*j)
Já vi que isto é um bocado complicado.
Cola isto num programa novo que apenas tenha uma listbox e uma commandbutton.
Private Sub Command1_Click()
Dim Ciclo As Integer
Dim NumAleatorio As Integer
Dim Temporario As String
For Ciclo = 0 To List1.ListCount - 1
NumAleatorio = Int(Rnd() * List1.ListCount)
Temporario = List1.List(Ciclo)
List1.List(Ciclo) = List1.List(NumAleatorio)
List1.List(NumAleatorio) = Temporario
Next Ciclo
End Sub
Private Sub Form_Load()
Dim Valores As Integer
Dim Naipes As Integer
Dim TodosOsValores As String
Dim TodosOsNaipes As String
Command1.Caption = "Baralhar"
TodosOsValores = "A234567890JQK"
TodosOsNaipes = "ECPO"
For Naipes = 1 To Len(TodosOsNaipes)
For Valores = 1 To Len(TodosOsValores)
List1.AddItem ( _
Mid(TodosOsValores, Valores, 1) & _
Mid(TodosOsNaipes, Naipes, 1) _
)
Next Valores
Next Naipes
End Sub
Estuda o código e depois recria-o; não te limites a copiar nada.
Armadillo 04-08-2008, 15:39 bitaite:
porque nao crias uma bd com as cartas, e fazes um
SELECT carta FROM baralho ORDER BY NEWID()?
Isto em SQL server funciona
Tenta ver se existe isto em Access
simplificava-te o codigo ;)
Armadillo, acho que isso é complicar desnecessariamente. O WinAce_Boy ainda está a ver se consegue baralhar uma listbox. Passar disso para as BDs ainda é complicar mais ;)
Armadillo 04-08-2008, 15:49 olha que nao. tens na bd 52 cartas/registos (coisa que tens que ter sempre, nem que seja num array, numa listbox, whatever). Para escolher aleatoriamente as cartas basta-te um "select". Sem Arrays, sem algoritmos de "baralhar" manhosos. ;)
Agora isso depende apenas da experiencia do user em usar BD's, visto que a nivel de codigo ficaria uma coisa ridiculamente pequena e simples.
my .02€
edit: alias, nem precisa de BD. Pode criar um Recordset on-the-fly e depois é só brincar com SQL
Recordset's rullez
Agora isso depende apenas da experiencia do user em usar BD's
É aí que está a questão. Se o OP souber usar BDs, tudo bem, mas se não souber, é melhor não ir por aí ainda.
IComeFromBehind 04-08-2008, 17:25 Uma base de dados para armazenar uma lista de cartas só para poupar uma linha ou duas linhas de código mas que engenheiros são estes?
Armadillo 04-08-2008, 17:55 edit: alias, nem precisa de BD. Pode criar um Recordset on-the-fly e depois é só brincar com SQL
Recordset's rullez
Estive a experimentar criar um Recordset sem BD. Conclusão: Não se consegue ordenar um Recordset, visto este, teoricamente, já ser o resultado de uma query (apesar de se poder usar filtros). Só usando mesmo uma BD é que a minha sugestão é exequível.
@IComeFromBehind: qual é o problema? se as BD existem é para serem usadas. Se me pouparem uma linha, eu aproveito. :002:
AliFromCairo 04-08-2008, 18:37 Na minha opinião, utilizar uma BD para fazer shuffle de um baralho é overkill porque neste caso, estás a utilizar a BD apenas para efeitos de ordenação. Isto pode ser feito de maneira bem mais eficiente (e simples) através de código.
Armadillo 04-08-2008, 18:55 deixem-se de purismos.:002: iria-se perder, o quê, 5ms? menos?
Se é a forma mais correcta? não. mas é muito mais pratica: deixa de existir o algoritmo de "baralhar" para passar a existir uma instrução SQL.
Less code = better code
Foi só um bitaite.
cumps ;)
Não quero mesmo desviar a discussão, mas farias realmente isso?
Para shuffling, basta um algoritmo simples como aquele. O facto de não o programares tu mesmo pode-te poupar trabalho, mas ele continua lá (ainda que seja no engine da BD), mais uma quantidade enorme de coisas que acabas por não usar. É um desperdício de recursos para uma tarefa muito simples.
Basta executar esse código 10000 vezes num loop para perceberes o quanto o acesso a uma BD pode custar ;)
Pelo menos eu nunca faria isso numa situação real. Talvez fizesse para aprender alguma coisa (já que desconhecia essa forma de trabalhar), mas nunca para pôr em uso na prática.
Less code = better code
nem sempre.
tu apenas escreves menos código, não quer dizer que o programa vá realmente usar menos código ou que seja mais eficiente. e neste caso também não vejo necessidade de usar BD
além disso, pelo que percebi, o user está a aprender, por isso só lhe faz bem pensar um bocadinho para adaptar aquela função de shuffle
Penso não ser boa ideia usar aqui BD's, não por questões de tempo etc.. mas sim porque me parece que ele está a começar a aprender por isso é melhor aprender a pensar e fazer código, pode até nem ficar bonito na primeira vez mas é assim que se começa. . . depois sim pode dar umas vistas de olhos em códigos feitos, modificar etc.. até meter como o armadillo gosta :D
cumpzz
WinAce_Boy 04-08-2008, 20:43 meu deus lol até me assutei com as novas post neste thread. Não estou conmfortavel com bds em vb6 ;) vou seguir o que o Kayvlim me aconselhou ;)
Abraço a todos amanha digo qualquer coisa
WinAce_Boy 05-08-2008, 01:12 kayvlim, é necessário pôr Randomize Timer?
A menos que queiras que por cada vez que ligas o programa ele baralhe exactamente da mesma forma, sim, é melhor pôres :P
WinAce_Boy 05-08-2008, 01:35 A menos que queiras que por cada vez que ligas o programa ele baralhe exactamente da mesma forma, sim, é melhor pôres
lol axo que nao quero isso.
Depois de estar quase este tempo todo a estudar o teu código consegui entendê-lo graças às tuas ajudas(sim, sou um aluno babado ;) ) em outros tópico iniciados também por mim e consegui também escrevê-lo sozinho SEM COPIAR ;)
Fiquei pasmado ao olhar para uma coisa tão simples e tão curta que eu estava a complicar tanto lol:
Private Sub Command2_Click()
List2.Clear
For i = 1 To 4
Randomize
value = CInt(Int((4 * Rnd()) + 1))
If i = 1 Then List2.AddItem value: v(1) = value
If i = 2 Then
Do
value = CInt(Int((4 * Rnd()) + 1))
Loop While value = v(1)
List2.AddItem value
v(2) = value
End If
If i = 3 Then
Do
value = CInt(Int((4 * Rnd()) + 1))
Loop While value = v(1) Or value = v(2)
List2.AddItem value
v(3) = value
End If
If i = 4 Then
Do
value = CInt(Int((4 * Rnd()) + 1))
Loop While value = v(1) Or value = v(2) Or value = v(3)
List2.AddItem value
End If
Next i
End Sub
Parece que ainda vos vou xatear mais um pouco neste projecto, vou levá-lo até ao fim e qualquer outra dúvida sobre o mesmo, voltarei a postar neste tópico.
Obrigado pela atenção
Abraços a todos!!!
;)
optimusSupremo 06-08-2008, 17:33 Tenta fazer o seguinte...
Tens as cartas todos num array ou colecção.
Geras um numero aleatorio de 1 a 52 e vais buscar exactamente a carta que está nessa posição.
Geras depois de 1 a 51 ... 50.... sempre a ir buscar a carta na posição gerada aleatoriamente.
Vais colocando noutro array ou colecção...
No fim tens as cartas completamente baralhadas...
Concordo absolutamente com OptimusSupremo. Não seja ele doutro planeta. lol imagina isto tens duas listas uma que é o baralho em si e outra que é lista com que queres jogar... crias um método que tem uma lista temp para onde fazes uma copia da lista do baralho base. a essa temp fazes um random e ele escolhe uma carta do baralho baseado no numero de elementos da lista temp ao efectuar esse random removes da lista temp essa carta e colocas a "carta" na lista jogável e processo repetesse até ficares sem cartas na lista temp e repara que fazes uma especie de random dinamico... pk? pk a escolha da carta(Random) é baseada no numero de elementos da lista. se acrescentares novas cartas imagina um jogo com dois baralhos este processo vai permitir que "embaralhes" quantas cartas quiseres... Espero não ter sido muito confuso
WinAce_Boy 09-09-2008, 17:51 tal como prometido aqui estou eu de novo agora com uma questao diferente:
http://i249.photobucket.com/albums/gg226/winace_boy/Semttulo-1.jpg
Gotaria de saber a melhor maneira de "pegar" nas cartas da lista (em texto) e fazê-las aparecer em imagem (já tenho as imagens de todas as cartas correspondente a cada carta/naipe) no respectivo lugar em que vai aparecer.
Obrigado pela atenção
Abraços
Armadillo 09-09-2008, 17:52 pretendes um drag & drop, percebi bem?
WinAce_Boy 09-09-2008, 17:56 não, não é isso, entao é o seguinte:
Tenho um baralho ja baralhado numa listbox e quero por exemplo pegar na primeira carta (a do topo do baralho) e pô-la numa das picturebox. Eu só quero saber mesmo qual será a melhor forma para o fazer (automaticamente).
Abraços espero ter-me feito entender
Armadillo 09-09-2008, 18:03 o ideal aí será gerares as cartas em run-time, ou seja, dentro duma picturebox, ires criando outros elementos (os naipes, os numeros, etc) dentro da 1ª (vê a propriedade parent (acho que é esta que vais precisar...)
WinAce_Boy 09-09-2008, 18:07 podes-me explicar como?
Não estarás a querer algo do género
Picture1.Picture = LoadPicture("C:\blablabla")
?
WinAce_Boy 09-09-2008, 18:20 exactamente mas o problema é que estou a pensar ter as imagens das cartas no programa em vez de as ter no disco, é como se tivesse 52 picturebox, mas sekalhar estou a complicar não?
Armadillo 09-09-2008, 18:23 basicamente, vais "desenhar/construir" as tuas cartas.
Ou seja, vais precisar de 4 images (uma para cada naipe).
Com um exemplo, a ver se te explico melhor:
Caso: 1ª carta é um 2 de paus
Global i=0
Funcao TuaFuncao
CriarCarta("paus", "2")
Fim Funcao
Funcao CriarCarta(naipe, valor)
i=i+1
Criar PictureBox(i+1)
Para x=1 to valor fazer
criar image(count).nome=i & x
image(count).parent=PictureBox(i)
image(count).imagemorigem=apppath & naipe & ".bmp"
'adicionar codigo da treta para colocar os naipes no sitio.
mostrar PictureBox(i);
fim para
Fim Funcao
agora é traduzir isto para VB :-)
Isso era se ele tivesse as imagens todas no disco.
Mas, WinAce_Boy, isso é mesmo o melhor a fazer! É que se tiveres as imagens todas no programa, ele fica pesado e nem podes customizar as cartas :D.
Precisarias de 52 pictures, cada uma já com a carta definida em design time, para que não viesses a precisar das imagens externas.
É mesmo melhor fazeres tudo com as imagens no disco, como o Armadillo mostrou.
WinAce_Boy 09-09-2008, 18:31 ok então.... xD la estou eu a complicar mais uma vez
obrigado pela atençao
ABRAÇOS!!
WinAce_Boy 26-09-2008, 12:57 outra questão, estou actualmente no 11º ano no curso tecnico de gestao e programacao de sistemas informaticos e no final do proximo ano terei que apresentar uma P.A.T OU P.A.P ouy la como se chama :P gostava de saber a vossa opinião de apresentar este projecto que consistira em 2 clientes em pcs diferentes para jogar poker um jogador contra o outro(em pcs diferentes), ja pedi a opiniao ao meu director de curso e ele disse que seria uma boa ideia e acrescentou que é raro haver ideias do genero.
Peço-vos a vossa opiniao p.f: o que acham de tornar este jogo como projecto para a PAP? É muito dificil?
Quero começar ja a pensar nisto para não programar stressado e para nao deixar tudo para o proximo ano....
Pf ajudem!!
Abraços ;)
WinAce_Boy 29-09-2008, 00:15 alguem?
é PAT, projecto de aptidão tecnológica. Em relação à ideia, sim é mesmo uma óptima ideia e o teu professor não te enganou! Não sei como é o júri da tua PAT, mas na minha, mesmo tendo um trabalho aceitável se teria boa nota :) .
WinAce_Boy 29-09-2008, 20:00 Boas e obrigado pelo apoio!
Quanto ao juri, vai ser composto por 3/4 elementos 1 deles é o tal professor com que eu falei que é o meu director de curso.
Outra coisa, não sabem se é apenas para o juri para quem vou apresentar ou aquilo tambem vai ter publico?
Abraços ;)
WinAce_Boy 30-09-2008, 11:28 e quanto à dificuldade?
Amigo WinAce_Boy, já não estás a fugir um bom bocado ao tópico? Questões sobre PAPs e PATs são mais em tópicos como este (http://www.techzonept.com/showthread.php?t=190681), e mais um ou outro que o Search revela ;)
WinAce_Boy 01-10-2008, 21:07 Boas;
Peço desculpa mas penso que não estou a fugir por completo ao assunto, já tinha visto essa thread mas pensava que era apenas para aquele user e pensei que o melhor sitio seria mesmo aqui mas parece que não...
Obrigado.
WinAce_Boy 27-10-2008, 14:03 Boas,
Voltei com mais uma dúvida no projecto "p_Poker":
Vou usar o componente Winsock com os conhecimentos que adquiri num outro projecto (link (http://www.techzonept.com/showthread.php?t=119749)) também usando este componente, um chat para 2 clientes e 1 servidor podendo também o servidor ter a funcionalidade de ser cliente conectando-se a ele próprio.
- Como será mais eficaz?
1) O projecto ser composto por um servidor mais dois clientes -> As cartas são geradas pelo servidor e processadas por ele, resumidamente os clientes quase não processam e enviam e recebem dados para o servidor comunicando um cliente com o outro cliente pelo servidor que poderá ou não estar no mesmo pc em que está a ser executado um dos clientes.
2) O projecto ser composto por apenas Dois clientes -> Tendo um cliente para além da sua função de cliente funcionará também como servidor sendo esse o único a processar e a gerar as cartas.
Peço-vos a vossa opinião, de momento posso dizer que estou mais inclinado para a 1ª opção visto que a 2ª poderá sobrecarregar o pc onde está a ser executado o [cliente/servidor]. Aqui estão algumas conclusões que, bem ou mal, eu tirei:
- Opção:
1) Vantagens: - Melhor organização/estrutura do código;
- Não sobrecarrega (tanto) um só pc visto que não terá duas funções em simultâneo.
Desvantagens: - A conexão de um cliente com o outro poderá ser mais lenta visto que para isso acontecer ele terá de primeiro enviar os dados para o servidor e só depois poderá o servidor reencaminhar esses mesmos dados para o cliente destinatário.
2) Vantagens: - Será menos um computador que terei de usar (em comparação à primeira opção) visto que este projecto terá de ser apresentado para a P.A.P, como projecto final de curso.
- Conecxão entre os clientes mais rápida.
Desvantagens: - Sobrecarga de um só computador visto que terá de fazer de servidor e cliente ao mesmo tempo.
Muito obrigado pela atenção, aguardando pela vossa opinião.
Abraços ;)
Não é bem resposta ao que pedes, mas se isso é só poker, acho que não é preciso tanta coisa. A menos que o jogo esteja horrivelmente programado, não vejo como é que um computador ter um servidor e um cliente possa ficar sobrecarregado.
Eu iria para um intermédio de ambos. Um programa age como servidor, e pode correr na mesma máquina que um dos clientes. Depois, ficam dois clientes separados.
Podem é existir desconfianças depois, na medida em que um dos computadores - o que tem o servidor - poderia ficar em vantagem se ficasse a interceptar os dados.
Podes ter um servidor e dois clientes ou podes ter dois clientes em que um deles age como servidor. Acho que é indiferente, porque tanto a nível da sobrecarga como a nível da transmissão dos dados, está numa escala muito pequena para fazer diferença.
Se for para correr num computador bastante limitado, então aconselhar-te-ia a fazer o servidor à parte dos clientes. Mais que não seja para imaginar que no futuro poderias fazer actualizações a cada um deles para fazer o jogo ser um multiplayer entre milhares de pessoas, que jogariam duas a duas :D
WinAce_Boy 27-10-2008, 20:41 Boas,
Muito obrigado desde já pela tua rápida resposta.
Vamos então por partes - não gosto muito de fazer citações porque parece que estamos a acusar alguém (uma opinião) mas vai ter que ser:
Não é bem resposta ao que pedes, mas se isso é só poker, acho que não é preciso tanta coisa. A menos que o jogo esteja horrivelmente programado, não vejo como é que um computador ter um servidor e um cliente possa ficar sobrecarregado.
Tens toda a razão mas sinto-me muito mais aliviado (por mais estranho que pareça) se pensar no pior caso desta situação: imagina que de facto o programa não está o mais eficiente possível o que não seria raro acontecer e juntando a isto imagina que me dão para apresentar, como são muitos computadores, 3 pc's que até não são grande coisa. É claro que este seria o pior caso, mas não gosto de pensar que poderia acontecer que aquilo ficasse muito lento durante uma apresentação, em frente a 4 ou 5 elementos do júri.
Eu iria para um intermédio de ambos. Um programa age como servidor, e pode correr na mesma máquina que um dos clientes. Depois, ficam dois clientes separados.
Também pensei nisso mas esqueci-me de referir essa 3ª opção.
Podem é existir desconfianças depois, na medida em que um dos computadores - o que tem o servidor - poderia ficar em vantagem se ficasse a interceptar os dados.
Ora uma grande verdade.
Se for para correr num computador bastante limitado, então aconselhar-te-ia a fazer o servidor à parte dos clientes. Mais que não seja para imaginar que no futuro poderias fazer actualizações a cada um deles para fazer o jogo ser um multiplayer entre milhares de pessoas, que jogariam duas a duas
Obrigado pelo conselho, também estava mais virado para essa opção até porque organizo melhor as ideias tendo cada programa uma função.
Hehe, por enquanto só estou virado para a P.A.P, depois e se eu estiver suficientemente satisfeito com o Jogo "p_PoKer" ^^ já tem nome xD.
Kayvlim, muito obrigado pelo esclarecimento,opinião e conselhos.
Se houver mais users com outras faz favor de as postarem ;) , eu não mordo ^.^
Obrigado pela atenção
Abraços ;)
Então considerando esse Worst Case Scenario, em que te dão três 8086s ( :D ), acho que estás a ir pelo caminho certo - cada computador com o seu objectivo, servidor e cliente separados.
Como isso ainda me parece simples, integra também aí o chat :D isto é, duas pessoas jogam em máquinas separadas, e picam-se uma à outra durante o jogo :D
WinAce_Boy 27-10-2008, 22:07 É claro que o chat não podia faltar e até porque não custa nada, comparando ao programa em si :P
WinAce_Boy 28-10-2008, 20:00 Boas,
Voltei com outra dúvida:
Preciso de enviar as cartas que foram listadas e baralhadas numa listbox no servidor para o cliente. Tentei com um ciclo:
- Ciclo:
Servidor:
for i=1 to listcount-1
winsock1.senddata list1.list(i)
next i
Cliente:
winsock1.getdata carta
list1.additem carta
Resultado: O cliente recebia os dados perfeitamente, mas para além de ser lento a receber as cartas uma a uma também se surgisse alguma messagebox nesse momento ele enquanto a msgbox estava aberta ele vai adicionando as cartas no mesmo item à medida que as recebe, gostava de saber se é possível tornar este processo mais rápido se por exemplo se enviar o baralho todo de uma vez (como apenas uma string) e depois o decompor em conjuntos de 2 caracteres no cliente seria mais rápido visto que é apenas um dado que ele envia?
Quanto à situação da msgbox gostaria de saber uma maneira de contornar o que se sucede.
Obrigado pela atenção, AbRaÇoS!!
;)
WinAce_Boy 30-10-2008, 19:44 alguem?
EDIT: não reparei que era em VB6... não sei porquê pensei que fosse em Java...
Apanho a discussão a meio, mas sugiro que envies objectos em vez de Strings... A questão de enviar as cartas baralhadas, se enviares tudo de uma vez é muito melhor... evitas de estar a enviar as prestações, depois do lado do cliente fazes o que queres com elas separadamente.
WinAce_Boy 31-10-2008, 19:54 Pensei exactamente da mesma maneira vou testar fazer dessa maneira, depois digo se é de facto mais rápido ou não. . .
Estou a pensar baralhar as cartas no servidor e criar uma string com a lista de cartas, exemplo:
- Lista(já baralhada):
Carta 1: "8O"
Carta 2: "9E"
Carta 3: "3C"
Carta 4: "2E"
...
(Até à carta 52)
Pegava em cada um dos items da lista e com um ciclo criava uma string da ista de cartas tendo como resultado algo do género: "8O9E3C2E" e no cliente (depois de ter recebido essa string) separava a string 2 a 2 caracteres para obter de novo a lista mas agora no cliente mas não sei como separar essa string.
Ajuda p.f !!
Se alguém tiver mais alguma sugestão não tenha medo de dizer, tudo o que ajude é bem-vindo ;)
Obrigado pela atenção
Abraços :)
Armadillo 03-11-2008, 10:08 porque nao usas arrays? assim nao vais ter que andar a separar a string ;)
WinAce_Boy 03-11-2008, 21:11 porque nao usas arrays? assim nao vais ter que andar a separar a string ;)
porque será mais lento enviar 52 coisas em vez de uma ja experimentei enviar carta a carta e demorava mesmo muito, enquanto que com o sistema de enviar a string para o cliente com o baralho e depois separar a string no cliente o resultado é bem mais rapido :)
Obrigado pela sugestão!
Abraços
fLaSh_CF 03-11-2008, 23:44 Boas;
Se quiseres posso te ajudar no processo de comunicação de dados por Internet..
Se estiveres interessado diz algo..
Compr.
|
|