
nds
Iré poniendo diferentes pruebas y homebrew para usar con la NDS (nintendo DS).
- APLICACIONES Y JUEGOS
- Isofácil (otro tipo de dibujo isométrico)
- Pintared (aplicación para dibujar)
- Aplicación dibujo isométrico (versión 2)
- Telesketch
- Aventura Informática (con Icarus Adventure)
- Juego Fuel (ASCII, pruebas de programación)
- Juego Frontón (ASCII, pruebas de programación)
- Juego Disquete volador (pruebas de programación)
- Aplicación Dibujo Isométrico (versión 1)
- APUNTES Y MANUALES
- La madera
- Miniguía de QCAD
- Aplicación para pasar de PowerPoint a NDS
que ria saber como ser alumno tuyo
@zatmar: los que firman como alumnos son alumnos míos de secundaria (yo soy profesor de secundaria de la asignatura tecnologías).
saludos.
a vale una cosa si eres porfe como es no te proiven esto por que es pirata
salu2
¿Por qué crees que es pirata? No pirateo juegos ni aplicaciones, sólo las programo. Las aplicaciones programadas para nds ni siquiera requieren la consola, pues se pueden usar emuladores gratuitos y obviamente no piratas que mismamente se descargar de portales como softonic.
saludos,
raúl
a vale perdon por llamarte pirata yo pormas que intento crear juegos como los tuyos no me salen se te dan muy bien
Saludos
me ayudarias a acer un programa como el tuyo para ds
@zatmar: los hechos con palib como está el código es mirar un poquitín cómo están hechos. El hecho con Icarus con el manual del Icarus y los ejemplos que vienen es más que de sobra.
En cualquier caso puedes preguntar comentar dudas y si puedo te respondo (ahora en breve me voy de vacaciones).
saludos,
raúl
ok,gracias
una pregunta cuando terminas con el palib todo como lo pasas a fichero nds
Ejecutas el fichero build.bat haciendo doble click sobre él y si todo va bien (no hay errores de compilación) crea un fichero template.nds que ya es el fichero nds.
saludos.
gracias
Saludo2
Hola como puedo hacer para que al meter un dato con el teclado en la nintendo DS me lo compare con otro y si no es el mismo me mande un error. Puse esto pero no me funcionó.
if ((letra ==PA_ENTER)&&nletra&& text == ej1){
PA_OutputSimpleText(1, 7, 1, «Bien «);
}
else
{
PA_OutputSimpleText(1, 8, 11, «Error»);
}
raul queria saber si me podrias ayudar estoy intando crear un bloc de notas para ds siguiendo un ejemplo palib y no se como acer para que guarde lo que escribo y despues cargarlo si lo sabes dimelo por favor
gracias de antemano
te dejo la mainc aqui
// Includes
#include // Include for PA_Lib
#include «gfx/all_gfx.h»
#include «gfx/all_gfx.c»
// Function: main()
int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_InitText(1, 0);
PA_InitKeyboard(2);
PA_KeyboardIn(0, 0);
s32 nletter = 0;
char letter = 0;
char text[200];
while (1)
{
if (Pad.Newpress.A) PA_SetKeyboardColor(0, 1);
if (Pad.Newpress.B) PA_SetKeyboardColor(1, 0);
if (Pad.Newpress.X) PA_SetKeyboardColor(2, 1);
if (Pad.Newpress.Y) PA_SetKeyboardColor(0, 2);
letter = PA_CheckKeyboard();
if (letter > 31) {
text[nletter] = letter;
nletter++;
}
else if ((letter == PA_BACKSPACE)&&nletter) {
nletter–;
text[nletter] = ‘ ‘;
}
else if (letter == ‘\n’){
text[nletter] = letter;
nletter++;
}
PA_OutputSimpleText(1, 8, 0, text);
PA_WaitForVBL();
}
return 0;
} // End of main()
@zatmar: si lo escribes con el bloc de notas debes guardar este fichero en (según mi ruta que es la estándar al instalar palib) c:\devkitpro\palib\template\source
aquí lo guardas como «main.c» (para que no te lo guarde como texto debes indicar en «guardar como…» en tipo «todos los archivos» (pues por defecto te lo guarda como «documento de texto» y por lo tanto añadiría la extensión main.c.txt que no se reconoce al compilar)).
Como no está guardado con la extensión de texto, para abrirlo lo más fácil es abrir primero el bloc de notas y después en «abrir» buscar tu main.c y ya está otra vez para editar.
(no sé si es esto lo que me preguntas).
En cualquier caso yo suelo usar el programa VisualHam que viene con palib (en el directorio template) y ahí ya edito el main.c sin usar el bloc de notas.
saludos.
creo que lo as entendido mal aver yo lo que estoy aciendo es un bloc de notas con el palib para la ds para escribir en la dsy eso ya lo tengo pero lo que me falta es acer que lo que escribo con la ds se me guarde en un documento.txt o por lo menos que se guarde y despues poder cargarlo desde la ds
@zatmar: efectivamente no te entendí. Pues abrir y cerrar ficheros desde la nds no sé hacerlo. Si aprendo la manera de hacerlo ya te lo comentaré.
suerte y un saludo,
raúl
ya evisto tu ultimo proyectoy me gusta mucho y queria saber como haces para poner el modo relleno y la paleta de colores a y otra cosa podrias presentar tu proyecto a nds.scenebeta.com y preentarlo a el Scenery Beta 09 pudes ganar 1º Clasificado: Trofeo + 150€ + Pendrive 4GB + Pegatinas + Diploma te dejo aqui un link a la noticia del concurso http://www.scenebeta.com/noticia/participantes-scenery-beta-2009
@zatmar: puedes descargar y mirar el código fuente, aunque no pongo muchos comentarios, algunos nombres de secciones son indicativos.
1.- Los colores es fácil, como puse muy pocos hice algo como:
if (punterocolorx == 54)
{
colorin=PA_RGB (0,0,0);
}
else if (punterocolorx == 76)
{
colorin=PA_RGB (31,0,0);
}
la variable colorin guarda el color en función de la variable punterocolorx (que aumenta o disminuye al pulsar el PAD en modo color).
2.- el modo relleno es (a mi juicio) bastante complejo, supongo que habrá formas más fáciles de programarlo, pero lo que hice (conceptualmente) es partir del píxel en el que se pulsa con el stylus y mirar de qué color son los 4 píxeles adyacentes, si son iguales al primero hay que rellenarlos y automáticamente hay que volver a mirar de que color son los adyacentes de estos y así sucesivamente.
En código es (bastante espantoso, seguro que hay formas de mejorarlo):
else if (tipo == 2) //modo relleno
{
if (Stylus.Newpress)
{
PA_SetSpriteXY(0, 3, Stylus.X, Stylus.Y);
n1 =1;
n2=1;
gen1x[0]=Stylus.X;
gen1y[0]=Stylus.Y;
colorrelleno=PA_Get16bitPixel (0, Stylus.X, Stylus.Y);
PA_Put16bitPixel (0, Stylus.X, Stylus.Y, colorin);
// PA_OutputText(1, 5, 1, «colorrelleno= %d «,colorrelleno);
// PA_OutputText(1, 5, 2, «colorin= %d «,colorin);
if (colorrelleno != colorin)
{ //empieza el relleno si el color es diferente
do { //comienza bucle do-while
for(i=0;i<n1;i++)
{
n2=n2-1;
}
for(i=0;i<n1;i++)
{
if ((colorrelleno==PA_Get16bitPixel (0, gen1x[i]+1,gen1y[i])) && (gen1x[i]<255))
{
PA_Put16bitPixel (0, gen1x[i]+1,gen1y[i], colorin);
gen2x[n2]=gen1x[i]+1;
gen2y[n2]=gen1y[i];
n2=n2+1;
}
}
for(i=0;i0)))
{
PA_Put16bitPixel (0, gen1x[i]-1,gen1y[i], colorin);
gen2x[n2]=gen1x[i]-1;
gen2y[n2]=gen1y[i];
n2=n2+1;
}
}
for(i=0;i<n1;i++)
{
if ((colorrelleno==PA_Get16bitPixel (0, gen1x[i],gen1y[i]+1)) && (gen1y[i]<191))
{
PA_Put16bitPixel (0, gen1x[i],gen1y[i]+1, colorin);
gen2x[n2]=gen1x[i];
gen2y[n2]=gen1y[i]+1;
n2=n2+1;
}
}
for(i=0;i1))
{
PA_Put16bitPixel (0, gen1x[i],gen1y[i]-1, colorin);
gen2x[n2]=gen1x[i];
gen2y[n2]=gen1y[i]-1;
n2=n2+1;
}
}
for(i=0;i<n2;i++)
{
gen1x[i]=gen2x[i];
gen1y[i]=gen2y[i];
}
n1=n2;
} while (n2 != 0); //finaliza bucle do-while
}//fin de la supuesta diferencia de colores
}//fin presionar stylus
} //fin modo relleno
saludos,
raúl
PD: gracias por el enlace, le echaré una ojeada
perdon por mi ignorancia pero nose integrarlo en mi proyecto
#include // Include for PA_Lib
#include «gfx/all_gfx.c»
#include «gfx/all_gfx.h»
s32 r = 31;
s32 g = 31;
s32 b = 31;
// Function: main()
int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_InitText(1, 0);
PA_Init16bitBg(0, 3);
PA_Init16bitBg(1, 3);
PA_SetBgColor(0, PA_RGB(31, 31, 31));
PA_EasyBgLoad(1, 0, zatmar);
while (1)
{
PA_16bitDraw(0,
PA_RGB(r, g, b));
if (Pad.Newpress.Right){
r = 0;
g = 30;
b = 0;
}
if (Pad.Newpress.L){
r = 0;
g = 0;
b = 30;
}
if (Pad.Newpress.R){
r = 30;
g = 0;
b = 0;
}
if (Pad.Newpress.Up){
r = 0;
g = 0;
b = 0;
}
if (Pad.Newpress.Down){
r = 25;
g = 25;
b = 25;
}
if (Pad.Newpress.Left){
r = 31;
g = 31;
b = 31;
}
if (Pad.Newpress.A){
r = 30;
g = 15;
b = 0;
}
if (Pad.Newpress.B){
PA_Clear16bitBg(0
);
}
PA_WaitForVBL();
}
return 0;
}
El cambio de color hay muchas maneras de hacerlo, por ejemplo, asociando un color a una variable que puede ser en función de cuántas veces demos a un mismo botón (en este caso el A, podría ser algo como esto, sólo cambiando la elección del color en vez de un color por cada botón, todos se pueden elegir con un único botón). Si lo combinamos con algún elemento visual para ver qué color es cada cosa ya estaría:
#include // Include for PA_Lib
#include “gfx/all_gfx.c”
#include “gfx/all_gfx.h”
s32 r = 31;
s32 g = 31;
s32 b = 31;
s32 variable = 0;
// Function: main()
int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_InitText(1, 0);
PA_Init16bitBg(0, 3);
PA_Init16bitBg(1, 3);
PA_SetBgColor(0, PA_RGB(31, 31, 31));
PA_EasyBgLoad(1, 0, zatmar);
while (1)
{
PA_16bitDraw(0,
PA_RGB(r, g, b));
if (Pad.Newpress.A){
variable = variable +1;
if (variable == 7)
{
variable = 0;
}
if (variable == 0){
r = 31;
g = 31;
b = 31;
}
else if (variable == 1){
r = 0;
g = 0;
b = 30;
}
else if (variable == 2){
r = 30;
g = 0;
b = 0;
}
else if (variable == 3){
r = 0;
g = 0;
b = 0;
}
else if (variable == 4){
r = 25;
g = 25;
b = 25;
}
else if (variable == 5){
r = 0;
g = 30;
b = 0;
}
else if (variable == 6){
r = 30;
g = 15;
b = 0;
}
}//fin de presionar A
if (Pad.Newpress.B){
PA_Clear16bitBg(0
);
}
PA_WaitForVBL();
}
return 0;
}
gracias ya me estaba quedando sin botones para poner colores como podria acer para pulsar el boton Y y ponerse en elmodo relleno? a y te vas a apuntoar al Scenery Beta 09
gracias y salud2!!!
@zatmar: el modo relleno te remito al comentario en el que puse el código y al propio código del programa. Yo creo que existen otras formas de pensar y programar el relleno. En cualquier caso este código sería funcional pero en función de cómo quieras el programa tendrías que incluirlo de una u otra manera.
saludos,
raúl
PD: lo del scenery beta me parece muy interesante pero (por lo menos de momento) no para mí.
una pregunta para integrar el codigo del modo relleno por que sustitullo la variavle colorin y colorrrelleno
raul me podrias decir que error tengo que no se que pasa te dejo aqui la main.c
// Includes
#include // Include for PA_Lib
#include “gfx/all_gfx.c”
#include “gfx/all_gfx.h”
s32 r = 31;
s32 g = 31;
s32 b = 31;
s32 dibujo = 0;
// Function: main()
int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_InitText(1, 0);
PA_Init16bitBg(0, 3);
PA_Init16bitBg(1, 3);
PA_SetBgColor(0, PA_RGB(31, 31, 31));
while (1)
{
PA_16bitDraw(0,
PA_RGB(r, g, b));
if (Pad.Newpress.L){
dibujo = dibujo +1;
if (dibujo == 9)
{
colorin = 0;
}
else if (dibujo == 1){
r = 0;
g = 31;
b = 31;
}
else if (dibujo == 2){
r = 20;
g = 6;
b = 0;
}
else if (dibujo == 3){
r = 31;
g = 31;
b = 0;
}
else if (dibujo == 4){
r = 25;
g = 25;
b = 25;
}
else if (dibujo == 5){
r = 0;
g = 31;
b = 0;
}
else if (dibujo == 6){
r = 31;
g = 26;
b = 0;
}
else if (dibujo == 7){
r = 20;
g = 0;
b = 0;
}
else if (dibujo == 8){
r = 0;
g = 31;
b = 19;
}
}//fin de presionar A
if (Pad.Newpress.Up){
dibujo = dibujo +1;
if (dibujo == 8)
{
dibujo = 0;
}
else if (dibujo == 1){
r = 0;
g = 17;
b = 31;
}
else if (dibujo == 2){
r = 15;
g = 6;
b = 0;
}
else if (dibujo == 3){
r = 20;
g = 20;
b = 20;
}
else if (dibujo == 4){
r = 0;
g = 25;
b = 0;
}
else if (dibujo == 5){
r = 31;
g = 20;
b = 0;
}
else if (dibujo == 6){
r = 17;
g = 0;
b = 0;
}
else if (dibujo == 7){
r = 0;
g = 25;
b = 14;
}
//fin de presionar A
if (Pad.Newpress.B){
PA_Clear16bitBg(0
);
}
PA_WaitForVBL();
}
return 0;
}
el error es de compilacion me pone // Includes
#include expects «filename» or gracias de antemano y salu2
@zatmar: el error es la primera línea de código: debe poner:
#include «PA9.h» //Include for PA_Lib
pero cambiando la primera comilla por el símbolo menor y la segunda por el símbolo mayor (es que aquí el blog no interpreta bien estos caracteres). Mira cualquier ejemplo de palib esa primera línea.
saludos.
te otro cosa que preguntar estoi intentando poner modo grafiti al proyecto pero slo me funciona si estoi pulsando a la L todo el rato para que pinte en modo grafiti el modo grafiti es este
if (Pad.Newpress.L){
variable = variable +1;
if (variable == 2)
{
variable = 0;
}
PA_Put16bitPixel(0,
Stylus.X,
Stylus.Y,
PA_RGB(0, 31, 0));
}
te dejo aqui toda la main por si te sirve de algo
// Includes
#include // Include for PA_Lib
s32 r = 31;
s32 g = 31;
s32 b = 31;
s32 variable = 0;
// Function: main()
int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_InitText(1, 0);
PA_Init16bitBg(0, 3);
PA_Init16bitBg(1, 3);
PA_SetBgColor(0, PA_RGB(31, 31, 31));
while (1)
{
PA_16bitDraw(0,
PA_RGB(r, g, b));
if (Pad.Newpress.Up){
variable = variable +1;
if (variable == 8)
{
variable = 0;
}
else if (variable == 1){
r = 0;
g = 17;
b = 31;
}
else if (variable == 2){
r = 15;
g = 6;
b = 0;
}
else if (variable == 3){
r = 20;
g = 20;
b = 20;
}
else if (variable == 4){
r = 0;
g = 25;
b = 0;
}
else if (variable == 5){
r = 31;
g = 20;
b = 0;
}
else if (variable == 6){
r = 17;
g = 0;
b = 0;
}
else if (variable == 7 ){
r = 0;
g = 25;
b = 14;
}
}
if (Pad.Newpress.L){
variable = variable +1;
if (variable == 2)
{
variable = 0;
}
PA_Put16bitPixel(0,
Stylus.X,
Stylus.Y,
PA_RGB(0, 31, 0));
}
if (Pad.Newpress.B){
PA_Clear16bitBg(0
);
}
PA_WaitForVBL();
}
return 0;
}
Raul como aces en el juego del fronton para que la bola rebote en la pantalla de abajo y no se salga de ella y otra cosa no se como acer para para que cuando rebote la bola en la barra anote 1 un punto
@zatmar:
1.- para rebotar la bola es fácil, uso la ecuación de velocidad lineal en cada coordenada. Ejemplo en coordenada x: x=x0+vx*t (x coordenada actual, x0 coordenada anterior, vx velocidad y t tiempo). Para que algo rebote, sencillamente cambia el sentido de la velocidad, esto es hacemos vx = -vx.
Programado (mira el código):
if(bolax == 30) //la bola llega a la derecha
{
velx=-velx; // la velocidad va al revés
}
y como está puesto:
bolax=bolax+velx;
la coordenada bolax se actualiza.
2.- Rebotar la bola en la barra:
if (bolax == 2) //posicion x de la barra
{
if (((posy-bolay)*(posy-bolay)) < 4) //hay choque
{
puntos=puntos+1; //aumentamos los puntos
velx=-velx;
PA_PlaySimpleSound(explosion);
PA_OutputText(1, 0, 0, “Puntos: %d “, puntos);
pierdetiempo=pierdetiempo/1.1; //va mas rapido
}
espero que te aclaren los comentarios.
saludos,
raúl
por que no aces un juego de peleas en 2D o uno de coches molaria mucho
Una pagina muy interesante, me gustaría aprender a programar aunque de momento estoy mas metido en el dibujo tecnico; me encantaria crear aplicaciones para la ds
raul toi viciando tol dia a estos juegos 🙂