primeiro commit
This commit is contained in:
parent
437ceb2f1c
commit
a497574995
2
.gitignore
vendored
2
.gitignore
vendored
@ -52,3 +52,5 @@ Module.symvers
|
||||
Mkfile.old
|
||||
dkms.conf
|
||||
|
||||
# Binario
|
||||
elefantes
|
||||
|
5
Makefile
Normal file
5
Makefile
Normal file
@ -0,0 +1,5 @@
|
||||
CC=gcc
|
||||
NAME=elefantes
|
||||
|
||||
compile:
|
||||
$(CC) -o $(NAME) main.c distancia.c screen.c -L/usr/include/ -lm -lncurses
|
@ -1,4 +1,5 @@
|
||||
# elefantes
|
||||
|
||||
Juego de pastorear elefantes.
|
||||
|
||||
Moviendo el pastor con las flechas del teclado hay que llevar a los elefantes a dentro del cercado.
|
53
distancia.c
Normal file
53
distancia.c
Normal file
@ -0,0 +1,53 @@
|
||||
#include "defs.h"
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/* colle duas coordenadas e calcula a distancia */
|
||||
double distancia(struct coord c, struct coord e) {
|
||||
int cat1 = c.x - e.x;
|
||||
int cat2 = c.y - e.y;
|
||||
|
||||
return sqrt(pow(cat1, 2) + pow(cat2, 2));
|
||||
}
|
||||
|
||||
/* devolve a nova coordenada á que moverse o elefante cando fuxe */
|
||||
struct coord fuxir(struct coord c, struct coord e) {
|
||||
/* definese velocidade por si o dia de mañá queremos acelerar o fuxir */
|
||||
int velocidade = 1;
|
||||
|
||||
/* vector imaxinario */
|
||||
float X = e.x - c.x;
|
||||
float Y = e.y - c.y;
|
||||
|
||||
/* loxitude vector imaxinario */
|
||||
float lonxitude = sqrtf(X*X + Y*Y);
|
||||
|
||||
/* printf("Vector imaxinario\n"); */
|
||||
/* printf("X: %f\n", X); */
|
||||
/* printf("Y: %f\n", Y); */
|
||||
/* printf("Lonxitude: %f\n", lonxitude); */
|
||||
|
||||
/* usamos a lonxitude para normalizar o vector imaxinario */
|
||||
X = X / lonxitude;
|
||||
Y = Y / lonxitude;
|
||||
|
||||
/* redondease o modificador ó int máis cercano */
|
||||
int dX = (int)(X < 0 ? (X - 0.5) : (X + 0.5));
|
||||
int dY = (int)(Y < 0 ? (Y - 0.5) : (Y + 0.5));
|
||||
|
||||
/* aplicase a velocidade ó vector imaxinario */
|
||||
dX = dX * velocidade;
|
||||
dY = dY * velocidade;
|
||||
|
||||
/* printf("Modif. X: %f\n", X); */
|
||||
/* printf("Modif. Y: %f\n", Y); */
|
||||
/* printf("Modif. dX: %i\n", dX); */
|
||||
/* printf("Modif. dY: %i\n", dY); */
|
||||
|
||||
/* aplicase o vector imaxinario de movemento ó elefante para desplazalo */
|
||||
e.x = e.x + dX;
|
||||
e.y = e.y + dY;
|
||||
|
||||
return e;
|
||||
}
|
||||
|
30
main.c
Normal file
30
main.c
Normal file
@ -0,0 +1,30 @@
|
||||
#include <stdio.h>
|
||||
#include "defs.h"
|
||||
|
||||
double distancia(struct coord c, struct coord e);
|
||||
struct coord fuxir(struct coord c, struct coord e);
|
||||
int screen();
|
||||
|
||||
int main(void) {
|
||||
/* printf("Iniciando.\n"); */
|
||||
|
||||
/* struct coord cazador = {1,1}; */
|
||||
/* struct coord elefante = {3,3}; */
|
||||
|
||||
/* double d = distancia(cazador, elefante); */
|
||||
/* printf("Distancia: %lf\n", d); */
|
||||
|
||||
/* struct coord nova; */
|
||||
/* nova = fuxir(cazador, elefante); */
|
||||
|
||||
/* printf("Nova localización do elefante:\n"); */
|
||||
/* printf("x %i\n", nova.x); */
|
||||
/* printf("y %i\n", nova.y); */
|
||||
/* double novaD = distancia(cazador, nova); */
|
||||
/* printf("Nova Distancia: %lf\n", novaD); */
|
||||
|
||||
screen();
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
153
screen.c
Normal file
153
screen.c
Normal file
@ -0,0 +1,153 @@
|
||||
#include <stdlib.h>
|
||||
#include <curses.h>
|
||||
#include "defs.h"
|
||||
|
||||
#define ELEFANTES 8
|
||||
|
||||
double distancia(struct coord c, struct coord e);
|
||||
struct coord fuxir(struct coord c, struct coord e);
|
||||
|
||||
void cuadra(WINDOW * win, int width, int height){
|
||||
int medioX = width/2;
|
||||
int medioY = height/2;
|
||||
|
||||
int anchoCaja = 5;
|
||||
int altoCaja = 2;
|
||||
|
||||
int bordeL = medioX - anchoCaja;
|
||||
int bordeR = medioX + anchoCaja;
|
||||
int bordeU = medioY - altoCaja;
|
||||
int bordeD = medioY + altoCaja;
|
||||
|
||||
/* bordesuperior */
|
||||
for(int i = bordeL; i <= bordeR; i++){
|
||||
mvwprintw(win, bordeU, i, "*");
|
||||
}
|
||||
/* borde inferior */
|
||||
for(int i = bordeL; i <= bordeR; i++){
|
||||
mvwprintw(win, bordeD, i, "*");
|
||||
}
|
||||
/* borde izquierdo */
|
||||
for(int i = bordeU; i <= bordeD; i++){
|
||||
mvwprintw(win, i, bordeL, "*");
|
||||
}
|
||||
/* borde dereito */
|
||||
for(int i = bordeU; i <= bordeD; i++){
|
||||
mvwprintw(win, i, bordeR, "*");
|
||||
}
|
||||
/* porta */
|
||||
mvwprintw(win, height/2+altoCaja, width/2, " ");
|
||||
mvwprintw(win, height/2+altoCaja, width/2-1, " ");
|
||||
mvwprintw(win, height/2+altoCaja, width/2+1, " ");
|
||||
|
||||
wrefresh(win);
|
||||
}
|
||||
|
||||
void generarElefantes(struct coord *buff){
|
||||
for(int i = 0; i < ELEFANTES; ++i) {
|
||||
int nMax=40;
|
||||
int nMin=10;
|
||||
int rX = rand() % ((nMax+1)-nMin) + nMin;
|
||||
int rY = rand() % ((nMax+1)-nMin) + nMin;
|
||||
|
||||
struct coord elefante = {rX+2,rY+2};
|
||||
buff[i] = elefante;
|
||||
}
|
||||
}
|
||||
|
||||
int screen() {
|
||||
initscr();
|
||||
noecho();
|
||||
curs_set(0); //cursor invisible
|
||||
|
||||
int height, width, start_y, start_x;
|
||||
height = 40;
|
||||
width = 80;
|
||||
start_y = 0;
|
||||
start_x = 0;
|
||||
|
||||
WINDOW * win = newwin(height, width, start_y, start_x);
|
||||
keypad(win, TRUE); //para ter as flechas
|
||||
refresh();
|
||||
|
||||
box(win, 0, 0);
|
||||
cuadra(win, width, height);
|
||||
|
||||
struct coord cazador = {height/3,width/2};
|
||||
mvwprintw(win, cazador.x, cazador.y, "^");
|
||||
|
||||
struct coord elefantes[ELEFANTES] = {0};
|
||||
generarElefantes(elefantes);
|
||||
|
||||
for(int i = 0; i < ELEFANTES; i++){
|
||||
mvwprintw(win, elefantes[i].x, elefantes[i].y, "?");
|
||||
}
|
||||
|
||||
while(true){
|
||||
int c = wgetch(win);
|
||||
switch(c){
|
||||
case KEY_UP:
|
||||
/* mvwprintw(win, 1, 1, "up"); */
|
||||
if (mvwinch(win, cazador.x-1, cazador.y) == ' '){
|
||||
mvwprintw(win, cazador.x, cazador.y, " ");
|
||||
cazador.x = cazador.x - 1;
|
||||
mvwprintw(win, cazador.x, cazador.y, "^");
|
||||
wrefresh(win);
|
||||
}
|
||||
break;
|
||||
case KEY_DOWN:
|
||||
/* mvwprintw(win, 1, 1, "down"); */
|
||||
if (mvwinch(win, cazador.x+1, cazador.y) == ' '){
|
||||
mvwprintw(win, cazador.x, cazador.y, " ");
|
||||
cazador.x = cazador.x + 1;
|
||||
mvwprintw(win, cazador.x, cazador.y, "^");
|
||||
wrefresh(win);
|
||||
}
|
||||
break;
|
||||
case KEY_RIGHT:
|
||||
/* mvwprintw(win, 1, 1, "right"); */
|
||||
if (mvwinch(win, cazador.x, cazador.y+1) == ' '){
|
||||
mvwprintw(win, cazador.x, cazador.y, " ");
|
||||
cazador.y = cazador.y + 1;
|
||||
mvwprintw(win, cazador.x, cazador.y, "^");
|
||||
wrefresh(win);
|
||||
}
|
||||
break;
|
||||
case KEY_LEFT:
|
||||
/* mvwprintw(win, 1, 1, "left"); */
|
||||
if (mvwinch(win, cazador.x, cazador.y-1) == ' '){
|
||||
mvwprintw(win, cazador.x, cazador.y, " ");
|
||||
cazador.y = cazador.y - 1;
|
||||
mvwprintw(win, cazador.x, cazador.y, "^");
|
||||
wrefresh(win);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// IA :D
|
||||
for(int i = 0; i < ELEFANTES; i++){
|
||||
struct coord elefante = elefantes[i];
|
||||
|
||||
double d = distancia(cazador, elefante);
|
||||
if (d < 3) {
|
||||
struct coord nova;
|
||||
nova = fuxir(cazador, elefante);
|
||||
|
||||
if (mvwinch(win, nova.x, nova.y) == ' '){
|
||||
mvwprintw(win, elefante.x, elefante.y, " ");
|
||||
elefante = nova;
|
||||
elefantes[i] = nova; //garda no array a posicion deste elefante
|
||||
mvwprintw(win, elefante.x, elefante.y, "?");
|
||||
wrefresh(win);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
endwin(); // dealocate memory and end ncurses
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user