Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Binary_Death

#491
Programación C/C++ / Puntero+indice
18 Agosto 2010, 02:50 AM
Verán... mi duda es la siguiente.

Yo tengo el siguiente código:


#include <stdio.h>
int main()
{
    int array[5] = {1, 2, 3, 4, 5};
    int *point = array;
    printf("%d", *(point+1));
    return 0;
}


El cual funciona correctamente, sin complicación.
La cosa es, yo defino un array de 5 elementos de tipo int, ok. Luego le asigno la dirección de inicio del array al puntero "point", el cual declaro. Y despues con un printf, imprimo el contenido de la dirección a la que apunta point más un desplazamiento de 1.
Si cada celda de memoria ocupa un byte, lo normal seria que el +1 apuntara al siguiente byte de memoria. La cosa es que un tipo int ocupa 4 bytes... entonces, el puntero apuntaría al siguiente byte, donde no están contenidos los 4 bytes completos del siguiente elemento del array.

Se me entiende?... en fin, agradecería que alguien pudiera explicarmelo.

Saludos ^^
#492
Programación C/C++ / Re: [C]Duda, typedef.
15 Agosto 2010, 07:42 AM
En la estructura cast... transformamos los dos valores a int, creo recordar.
Entonces... en el caso del puntero, es lo mismo? Pero, dónde se define el puntero?

(int*)0x0001;

Creamos un puntero a un entero, y ese puntero apunta a la direccion 0x0001, pero donde esta el puntero?  :xD Es decir... por lo que se ahora, un puntero de declara y define así:

int *p = 0x0001;

Y con eso habré creado un puntero a un entero que apunte a la celda de memoria 0x0001... sin embargo, no entiendo la estructura que me planteas  :-\
Con int ya decimos que apunta a un entero, entonces, por que el cast?

Gracias por ayudar Og. ^^

EDITO:

Pongo algo que hice con lo que me dijiste:


#include <stdio.h>
int main() {
    int a = 4;
int *p = (int*)&a;
printf("%d", *p);
return 0;
}


Pero sigo sin entender, si con "int *p" ya decimos que direcciona un entero, para que el cast  :xD
#493
Programación C/C++ / [C]Duda, typedef.
15 Agosto 2010, 04:00 AM
Este era el post de otra duda, pero como la solucioné antes de que nadie respondiera, economizo, edito y planteo otra  ;D

Typedef permite definir alias para los tipos de variables, de tal forma que si yo hago...

typedef int entero;
entero a = 5;


Puedo definir la variable "a" como un entero cuyo valor es 5.
Bien, la cuestión es... en mi libro de aprendizaje, vienen la siguientes sentencias:


typedef int * pint;
int *p = pint(0x1F5);


Lo cual, a mi entender, no tiene ningún sentido, pues declara el alias como un puntero... no le veo la lógica, lo que se pretende hacer con eso. Y más aun, usando "pint" como la llamada a una función  :-\

En fin, gracias por la atención...
Saludos =)
#494
Sí... estoy de acuerdo Smart... sin embargo, siempre hay diferentes métodos para hacer las cosas, aunque no todos igual de eficaces...

Mira, aquí te dejo algo que hice "sin coordenadas", porque en verdad, si lo vemos desde otro punto de vista, sigue siendo con coordenadas...

Código (dos) [Seleccionar]

@Echo Off
=========================
::Coded By Binary_Death::
=========================
SetLocal EnableDelayedExpansion
Title Graphics Using Another Way
If Not Exist KeyBoard.Com Call:Key
Set "LimC=4"
Set "LimL=4"
Set "CurPos=0"
Set "CurLine=0"
Set "Player=O"
Set "Table=°"
Call:Create_Table
:_Main
call:Load_Graphic
KEYBOARD.COM
If "%ErrorLevel%" EQU "77" (Call:MovR)
If "%ErrorLevel%" EQU "80" (Call:MovD)
If "%ErrorLevel%" EQU "75" (Call:MovL)
If "%ErrorLevel%" EQU "72" (Call:MovU)
GoTo:_Main
:MovR
If "%CurPos%" EQU "%LimC%" GoTo:EoF
Set "Line_%CurLine%=!Line_%CurLine%:@=-!"
Set/A "CurPos+=1"
Set/A Gx=%CurPos%+1
Set "Line_%CurLine%=!Line_%CurLine%:~0,%CurPos%!@!Line_%CurLine%:~%Gx%,%LimC%!"
GoTo:EoF
:MovL
If "%CurPos%" EQU "0" GoTo:EoF
Set "Line_%CurLine%=!Line_%CurLine%:@=-!"
Set/A "CurPos-=1"
Set/A Gx=%CurPos%+1
Set "Line_%CurLine%=!Line_%CurLine%:~0,%CurPos%!@!Line_%CurLine%:~%Gx%,%LimC%!"
GoTo:EoF
:MovD
If "%CurLine%" EQU "%LimL%" GoTo:EoF
Set "Line_%CurLine%=!Line_%CurLine%:@=-!"
Set/A "CurLine+=1"
Set/A Gx=%CurPos%+1
Set "Line_%CurLine%=!Line_%CurLine%:~0,%CurPos%!@!Line_%CurLine%:~%Gx%,%LimC%!"
GoTo:EoF
:MovU
If "%CurLine%" EQU "0" GoTo:EoF
Set "Line_%CurLine%=!Line_%CurLine%:@=-!"
Set/A "CurLine-=1"
Set/A Gx=%CurPos%+1
Set "Line_%CurLine%=!Line_%CurLine%:~0,%CurPos%!@!Line_%CurLine%:~%Gx%,%LimC%!"
GoTo:EoF
:Create_Table
Set/A Count=0
For %%x in ("@----","-----","-----","-----","-----") do (
Set "Line_!Count!=%%~x"
Set/A "Count+=1"
)
GoTo:EoF
:Load_Graphic
more/c<nul
For /L %%l in (0,1,%LimL%) do (
Set "Show=!Line_%%l:@=%Player%!"
Set "Show=!Show:-=%Table%!"
Echo. !Show!)
GoTo:EoF
:Key
(ECHO.N KEYBOARD.COM
ECHO.E 0000 B4 08 CD 21 3C 00 75 02 CD 21 B4 4C CD 21
ECHO.R CX
ECHO.000E
ECHO.W0
ECHO.Q)|DEBUG 1>NUL 2>&1
GOTO:EOF


Saludos!
#495
Y sí... la cuestión es que la mayoría (por no decir todos) se basan en coordenadas.
Tu colous por ejemplo, es todo coordenadas  :xD como principio básico.

Sé que hay otro método, y si mal no recuerdo usa carácteres  :-\ es raro. Pregunto esto para ver si alguien conoce esas otras formas de manipular gráficos.

Y bueh, a ver si hay suerte  :xD
#496
Scripting / Re: no me funciona ASSOC?
7 Agosto 2010, 03:42 AM

assoc .avi=batfile


Saludos!
#497
Bien, después de informarme bastante sobre el manejo de gráficos en Batch usando el plano cartesiano, me pregunté si alguien conocería algún otro método que permitiera un control de gráficos equivalente al que se tiene usando coordenadas.

Sé que lo hay, pues no hace mucho encontré un Batch Game que usaba otro método... postearía el código de éste si mi mala memoria me permitiera recordar su nombre y en qué página estaba  :¬¬  :xD

En fin, gracias por la atencion ^^
Saludos!
#498
Yyyy  :xD :xD ya ves, a veces nos complicamos la vida.
Pero igual, está genial para hacerlo manualmente, así se entiende la lógica de la conversión.
Si lo tienes que emplear en un código por X motivo, pues es mejor hacerlo por el método rápido, obviamente, que es más óptimo.

Saludos!
#499
Tienes que definir el objeto como un cojunto de coordenadas, por ejemplo:

set button_1=0,0;0,1;0,2; ... etc

Entonces, luego, con cmouse, colous o mouse.dat, obtienes una coordenada que el usuario clickeo y la compruebas con un find..

echo %button_1%|find ";coordenada;"
if errorlevel 0 (
rem aqui el código que se ejecutará si la coordenada obtenida corresponde a alguna de las coordenadas del objeto
)


Como ves controlando eso puedes saber si se pulso un X botón. Hay diversas maneras, sin embargo esa es la mas simple.
Saludos!

PD: Sobre coordenadas con "debug"... creé un manual hace unas semanas... no te sirve para esto, es más para parte gráfica escribiendo en la memoria de video...

Espero que no sea SPAM, si no, lo quito y no problem, es solo para ayudar: http://foro.portalhacker.net/index.php/topic,113483.0/wap2.html

En fin, saludos.

#500
Scripting / Re: Menú de selección en Batch
5 Agosto 2010, 23:31 PM
Muy bueno leo! ^^
Trabajaré la forma de poder automatizar el estilo del mío... para no tener que diseñar las opciones manualmente. Igual, por el método empleado correría muy lento, así que no se si vale la pena =/ mejor que de ese tipo de menú sólo hayan cortitos  :xD

En fin, saludos =)

Por cierto, Ari-Slash... el menu selectivo podría hacerse igual con set junto con /p, pero habría que presionar una tecla y además no aceptaría laexas flechas de dirección... igualmente, en cuanto al funcionamiento, el keyboard es lo de menos, solo es como un set /p al cual le das una entrada de un solo caracter y almacena en errorlevel el número en ascii de la tecla pulsada... así que de ahí compruebas.