changeset 38:6626e451a09d

fix random number.
author koba <koba@cr.ie.u-ryukyu.ac.jp>
date Tue, 11 Jan 2011 16:27:01 +0900
parents 6989f8cb0259
children 5484b8606e8e
files Character.h Character_state.c Dandy.cc TaskDandy.cc ppe/chara_state22.cc ppe/chara_state25.cc ppe/chara_state28.cc ppe/chara_state41.cc ppe/chara_state500.cc ppe/chara_state601.cc ppe/chara_state602.cc state_task.cc
diffstat 12 files changed, 164 insertions(+), 55 deletions(-) [+]
line wrap: on
line diff
--- a/Character.h	Sun Jan 09 23:14:26 2011 +0900
+++ b/Character.h	Tue Jan 11 16:27:01 2011 +0900
@@ -14,6 +14,8 @@
 #define ENEMY 2
 #define ENEMYBULLET 3
 
+#define FIX_NUM 17
+
 //typedef void (*STATE)(CHARACTER *p);
 typedef struct CHARACTER * (*State)(struct CHARACTER *p);
 typedef struct CHARACTER * (*Collision)(struct CHARACTER *p);
--- a/Character_state.c	Sun Jan 09 23:14:26 2011 +0900
+++ b/Character_state.c	Tue Jan 11 16:27:01 2011 +0900
@@ -30,6 +30,15 @@
 int asteroidi = 0;
 int enemyfaste = 0;
 int fastebos = 0;
+int counter = 0;
+
+static
+int get_num()
+{
+    counter++;
+    counter %= 4;
+    return counter;
+}
 
 CHARACTER * noaction(CHARACTER *p)
 {
@@ -427,32 +436,34 @@
 CHARACTER * chara_state22(CHARACTER *p)
 {
   int sf;
+  int rand = get_num();
 
-  sf = rand() % 4;
+  sf = rand % 4;
   if((sf == 0) || (sf == 1))
     {
       p->x = -35;
-      p->y = rand() % (120 - 35);
-      p->vx = (rand() % 4 + 1);
-      p->vy = rand() % 3 + 1;
+      p->y = rand % (120 - 35);
+      p->vx = (rand % 4 + 1);
+      p->vy = rand % 3 + 1;
       p->state = chara_state23;
     }
   if((sf == 2))
     {
-      p->x = rand() % 290;
+      p->x = rand % 290;
       p->y = -30;
-      p->vx = rand() % 3 - 1;
-      p->vy = (rand() % 4 + 1);
+      p->vx = rand % 3 - 1;
+      p->vy = (rand % 4 + 1);
       p->state = chara_state23;
     }
   if(sf == 3)
     {
       p->x = 320;
-      p->y = rand() % (120 - 35);
-      p->vx = (rand() % 4 + 1) * -1;
-      p->vy = rand() % 3 -1;
+      p->y = rand % (120 - 35);
+      p->vx = (rand % 4 + 1) * -1;
+      p->vy = rand % 3 -1;
       p->state = chara_state23;
     }
+  printf("x = %f, y = %f, vx = %f, vy = %f\n",p->x, p->y, p->vx, p->vy);
   return p;
 }
 	  
@@ -482,6 +493,7 @@
 CHARACTER * chara_state25(CHARACTER *p)
 {
   int amari;
+  int rand = get_num();
 
   if(p->dt1 <= 360)
     {
@@ -495,7 +507,7 @@
     }
   count++;
   PutSprite(count, p->x - 42, p->y, 64);
-  amari = rand() % 160;
+  amari = rand % 160;
   if((amari == 1) && (enemy_part5->f == TRUE))
     {
       p->state = chara_state26;
@@ -604,6 +616,8 @@
 }
 CHARACTER * chara_state28(CHARACTER *p)
 {
+  int rand = get_num();
+
   if (p->dt1 <= 360)
     {
       p->x = Mycos(p->dt1) * 30 / SANKAKU + 82 + 32;
@@ -620,9 +634,9 @@
     {
       Putenemy(24, p->x + 14,
 	       p->y + 14,
-	       (rand() % 5 + 0.5) * (rand() % 2 ==
+	       (rand % 5 + 0.5) * (rand % 2 ==
 				     1 ? -1 : 1),
-	       (rand() % 5 + 0.5) * (rand() % 2 ==
+	       (rand % 5 + 0.5) * (rand % 2 ==
 				     1 ? -1 : 1), chara_state29);
     }
   p->dt1 += 3;
@@ -902,6 +916,8 @@
 
 CHARACTER * chara_state41(CHARACTER *p) //left arm up arm vulkan
 {
+  int rand;
+
   if (enemy_part2->f == FALSE)
     {
       Bom(p->x, p->y);
@@ -929,7 +945,7 @@
     {
       if (p->dt1 % 15 == 1) 
 	{
-	  Puttama(9 + rand() % 2, p->x, p->y);
+	  Puttama(9 + rand % 2, p->x, p->y);
 	}
     }
   if (rinkf1 == 10)
@@ -1057,6 +1073,7 @@
 
 CHARACTER * chara_state500(CHARACTER *p)
 {
+  int rand = get_num();
   p->s = 0;
   
   kyeenemyno = p;
@@ -1070,14 +1087,14 @@
   PutSpriteEx(100, p->x + 16, p->y + 16, 2, 2, p->dt1);
   
   if (p->dt1 % (5 + p->dt2 / 8) == 1) {
-    if (rand() % 2 == 1)
+    if (rand % 2 == 1)
       Putenemy(24, p->x, p->y,
-	       (rand() % 5 + 0.5) * (rand() % 2 ==
+	       (rand % 5 + 0.5) * (rand % 2 ==
 				     1 ? -1 : 1),
-	       (rand() % 5 + 0.5) * (rand() % 2 ==
+	       (rand % 5 + 0.5) * (rand % 2 ==
 				     1 ? -1 : 1), chara_state501);
     else
-      Putenemy(rand() % 2 + 1, p->x,
+      Putenemy(rand % 2 + 1, p->x,
 	       p->y,
 	       (int) Mycos(p->dt1 / 4) * 4 /
 	       SANKAKU,
@@ -1100,6 +1117,7 @@
       Puttama(11, p->x, p->y);
     }
   p->dt1++;
+  printf("x = %f, y = %f, vx = %f, vy = %f\n",p->x, p->y, p->vx, p->vy);
   return p;
 }
 
@@ -1131,14 +1149,15 @@
 
 CHARACTER * chara_state601(CHARACTER *p)
 {
+  int rand = get_num();
   p->dt2++;
   if (p->x < jiki.x)
     p->vx++;
   if (p->x > jiki.x)
     p->vx--;
   p->x += p->vx;
-  Putenemy(6, p->x + 16 + rand() % 32,
-	   p->y, 0, rand() % 4, chara_state400);
+  Putenemy(6, p->x + 16 + rand % 32,
+	   p->y, 0, rand % 4, chara_state400);
   if (p->x < 0)
     p->x = 0;
   if (p->x > 260)
@@ -1156,10 +1175,12 @@
 
 CHARACTER * chara_state602(CHARACTER *p)
 {
+  int rand = get_num();
+
   p->dt2++;
   Putenemy(24, p->x + 14, p->y + 14,
-	   (rand() % 5 + 0.5) * (rand() % 2 == 1 ? -1 : 1),
-	   (rand() % 5 + 0.5) * (rand() % 2 == 1 ? -1 : 1),
+	   (rand % 5 + 0.5) * (rand % 2 == 1 ? -1 : 1),
+	   (rand % 5 + 0.5) * (rand % 2 == 1 ? -1 : 1),
 	   chara_state29);
   if (p->dt2 > 1024) {
     p->state = chara_state600;
@@ -1191,5 +1212,6 @@
 	}
     }
     asteroidi++;
+    //    printf("x = %f, y = %f, vx = %f, vy = %f\n",p->x, p->y, p->vx, p->vy);
     return p;
 }
--- a/Dandy.cc	Sun Jan 09 23:14:26 2011 +0900
+++ b/Dandy.cc	Tue Jan 11 16:27:01 2011 +0900
@@ -335,7 +335,7 @@
 	tlv3[i].y = -1;
     }
     filpcount = 0;
-    stage = 0;
+    stage = 4;
     //for (i = 0; i < 300; i++)
     //enemy[i].f = FALSE;
     jiki.zanki = 3;
--- a/TaskDandy.cc	Sun Jan 09 23:14:26 2011 +0900
+++ b/TaskDandy.cc	Tue Jan 11 16:27:01 2011 +0900
@@ -69,7 +69,6 @@
 SDL_Joystick *joy;
 
 
-
 const char *usr_help_str = "Usage: ./twice [-length data_length] [-count task_num]\n\
   -length  Number of data (default DATA_NUM (Func.h))\n\
   -count   Number of task (default 1)\n";
@@ -285,10 +284,10 @@
 	asteroidi = 0;
 	// timeprof_begin(timeprof_move);
 	//Move(); //enemy move
-	collision_detect();
 	outofwindow();
 	// timeprof_end(timeprof_move);
 	state_update();
+	collision_detect();
 	//charpatern();
 	//bosguage();
     
@@ -335,7 +334,7 @@
 	tlv3[i].y = -1;
     }
     filpcount = 0;
-    stage = 0;
+    stage = 4;
     //for (i = 0; i < 300; i++)
     //enemy[i].f = FALSE;
     jiki.zanki = 3;
--- a/ppe/chara_state22.cc	Sun Jan 09 23:14:26 2011 +0900
+++ b/ppe/chara_state22.cc	Tue Jan 11 16:27:01 2011 +0900
@@ -6,31 +6,33 @@
 static int
 state22(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int rand = (int)smanager->get_param(0);
+
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
-      int sf = rand() % 4;
+      int sf = rand % 4;
       if((sf == 0) || (sf == 1))
       {
 	  p->x = -35;
-	  p->y = rand() % (120 - 35);
-	  p->vx = (rand() % 4 + 1);
-	  p->vy = rand() % 3 + 1;
+	  p->y = rand % (120 - 35);
+	  p->vx = (rand % 4 + 1);
+	  p->vy = rand % 3 + 1;
 	  p->task = STATE23;
       }
       if((sf == 2))
       {
-	  p->x = rand() % 290;
+	  p->x = rand % 290;
 	  p->y = -30;
-	  p->vx = rand() % 3 - 1;
-	  p->vy = (rand() % 4 + 1);
+	  p->vx = rand % 3 - 1;
+	  p->vy = (rand % 4 + 1);
 	  p->task = STATE23;
       }
       if(sf == 3)
       {
 	  p->x = 320;
-	  p->y = rand() % (120 - 35);
-	  p->vx = (rand() % 4 + 1) * -1;
-	  p->vy = rand() % 3 -1;
+	  p->y = rand % (120 - 35);
+	  p->vx = (rand % 4 + 1) * -1;
+	  p->vy = rand % 3 -1;
 	  p->task = STATE23;
       }
 
--- a/ppe/chara_state25.cc	Sun Jan 09 23:14:26 2011 +0900
+++ b/ppe/chara_state25.cc	Tue Jan 11 16:27:01 2011 +0900
@@ -12,6 +12,7 @@
 
     int part1_f = (int)smanager->get_param(0);
     int part5_f = (int)smanager->get_param(1);
+    int rand = (int)smanager->get_param(2);
 
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
     int count = *(int*)smanager->get_input(rbuf, 1);
@@ -40,7 +41,7 @@
     count++;
     *w_count = count;
     PutSprite(count, p->x - 42, p->y, 64, &sprite->data[0]);
-    amari = rand() % 160;
+    amari = rand % 160;
     if((amari == 1) && (part5_f == TRUE))
     {
 	p->task = STATE26;
--- a/ppe/chara_state28.cc	Sun Jan 09 23:14:26 2011 +0900
+++ b/ppe/chara_state28.cc	Tue Jan 11 16:27:01 2011 +0900
@@ -7,6 +7,8 @@
 static int
 state28(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int rand = (int)smanager->get_param(2);
+
     int length = 2;
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
     int count = *(int*)smanager->get_input(rbuf, 1);
@@ -35,9 +37,9 @@
     {
 	Putenemy(24, p->x + 14,
 		 p->y + 14,
-		 (rand() % 5 + 0.5) * (rand() % 2 ==
+		 (rand % 5 + 0.5) * (rand % 2 ==
 				       1 ? -1 : 1),
-		 (rand() % 5 + 0.5) * (rand() % 2 ==
+		 (rand % 5 + 0.5) * (rand % 2 ==
 				       1 ? -1 : 1), STATE29, &sprite->data[1]);
     } else {
 	length = 1;
--- a/ppe/chara_state41.cc	Sun Jan 09 23:14:26 2011 +0900
+++ b/ppe/chara_state41.cc	Tue Jan 11 16:27:01 2011 +0900
@@ -7,6 +7,7 @@
 state41(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     int enemy_part2_f = (int)smanager->get_param(1);
+    int rand = (int)smanager->get_param(6);
     
     int length;
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
@@ -59,7 +60,7 @@
 	    sprite->flag = true;
 	    sprite->length = length;
 
-	    Puttama(9 + rand() % 2, p->x, p->y, &sprite->data[0]);
+	    Puttama(9 + rand % 2, p->x, p->y, &sprite->data[0]);
 	}
     }
     if (rinkf1 == 10)
--- a/ppe/chara_state500.cc	Sun Jan 09 23:14:26 2011 +0900
+++ b/ppe/chara_state500.cc	Tue Jan 11 16:27:01 2011 +0900
@@ -7,6 +7,8 @@
 static int
 state500(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int rand = (int)smanager->get_param(0);
+
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
     int count = *(int*)smanager->get_input(rbuf, 1);
 
@@ -30,14 +32,14 @@
     if (p->dt1 % (5 + p->dt2 / 8) == 1) {
 	sprite->length = 3;
 
-	if (rand() % 2 == 1)
+	if (rand % 2 == 1)
 	    Putenemy(24, p->x, p->y,
-		     (rand() % 5 + 0.5) * (rand() % 2 ==
+		     (rand % 5 + 0.5) * (rand % 2 ==
 					   1 ? -1 : 1),
-		     (rand() % 5 + 0.5) * (rand() % 2 ==
+		     (rand % 5 + 0.5) * (rand % 2 ==
 					   1 ? -1 : 1), STATE501, &sprite->data[2]);
 	else
-	    Putenemy(rand() % 2 + 1, p->x,
+	    Putenemy(rand % 2 + 1, p->x,
 		     p->y,
 		     (int) Mycos(p->dt1 / 4) * 4 /
 		     SANKAKU,
--- a/ppe/chara_state601.cc	Sun Jan 09 23:14:26 2011 +0900
+++ b/ppe/chara_state601.cc	Tue Jan 11 16:27:01 2011 +0900
@@ -6,6 +6,8 @@
 static int
 state601(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int rand = (int)smanager->get_param(0);
+
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
     player *jiki = (player*)smanager->get_input(rbuf, 1);
 
@@ -23,8 +25,8 @@
     if (p->x > jiki->x)
 	p->vx--;
     p->x += p->vx;
-    Putenemy(6, p->x + 16 + rand() % 32,
-	     p->y, 0, rand() % 4, STATE400, &sprite->data[0]);
+    Putenemy(6, p->x + 16 + rand % 32,
+	     p->y, 0, rand % 4, STATE400, &sprite->data[0]);
     if (p->x < 0)
 	p->x = 0;
     if (p->x > 260)
--- a/ppe/chara_state602.cc	Sun Jan 09 23:14:26 2011 +0900
+++ b/ppe/chara_state602.cc	Tue Jan 11 16:27:01 2011 +0900
@@ -6,6 +6,8 @@
 static int
 state602(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int rand = (int)smanager->get_param(0);
+
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
     int length = 1;
@@ -18,8 +20,8 @@
 
     p->dt2++;
     Putenemy(24, p->x + 14, p->y + 14,
-	     (rand() % 5 + 0.5) * (rand() % 2 == 1 ? -1 : 1),
-	     (rand() % 5 + 0.5) * (rand() % 2 == 1 ? -1 : 1),
+	     (rand % 5 + 0.5) * (rand % 2 == 1 ? -1 : 1),
+	     (rand % 5 + 0.5) * (rand % 2 == 1 ? -1 : 1),
 	     STATE29, &sprite->data[0]);
     if (p->dt2 > 1024) {
 	p->task = STATE600;
--- a/state_task.cc	Sun Jan 09 23:14:26 2011 +0900
+++ b/state_task.cc	Tue Jan 11 16:27:01 2011 +0900
@@ -38,8 +38,18 @@
 int enemyfaste = 0;
 int fastebos = 0;
 
+int counter = 0;
+
 State state_list[LIST_NUM];
 
+/* output 0~3 */
+static
+int get_num()
+{
+    counter++;
+    counter %= 4;
+    return counter;
+}
 
 static
 int power_of_two(int input)
@@ -146,11 +156,24 @@
 
 
 void
+PrintCoordinate(SchedTask *s, void *chara, void *arg)
+{
+    CHARACTER *p = (CHARACTER*)chara;
+    printf("x = %f, y = %f, vx = %f, vy = %f\n",p->x, p->y, p->vx, p->vy);
+
+    int num = GetStateNum(p->task);
+    p->state = state_list[num];
+}
+
+
+void
 freeObject(SchedTask *s, void *chara, void *obj)
 {
     free(obj);
 
     CHARACTER *p = (CHARACTER*)chara;
+//    printf("x = %f, y = %f, vx = %f, vy = %f\n",p->x, p->y, p->vx, p->vy);
+
     int num = GetStateNum(p->task);
     p->state = state_list[num];
 }
@@ -224,6 +247,26 @@
 
 
 CHARACTER*
+FixRandomTask(CHARACTER *p)
+{
+    int task_num = p->task;
+    HTaskPtr state_task = tmanager->create_task(task_num);
+    
+    state_task->set_param(0, (memaddr)get_num());
+
+    state_task->set_inData(0, p, sizeof(CHARACTER));
+
+    state_task->set_outData(0, p, sizeof(CHARACTER));
+
+    state_task->set_post(PrintCoordinate, (void*)p, NULL);
+    state_task->set_cpu(SPE_ANY);
+    state_task->spawn();
+
+    return p;
+}
+
+
+CHARACTER*
 withJikiTask(CHARACTER *p)
 {
     int task_num = p->task;
@@ -257,7 +300,7 @@
     state_task->set_outData(0, p, sizeof(CHARACTER));
     state_task->set_outData(1, obj, 0);
 
-    state_task->set_post(checkContainer, (void*)p, (void*)obj);    
+    state_task->set_post(checkContainer, (void*)p, (void*)obj);
     state_task->set_cpu(SPE_ANY);
     state_task->spawn();
     
@@ -316,7 +359,7 @@
     }
     state_task->set_cpu(SPE_ANY);
     state_task->spawn();
-
+    
     asteroidi++;
     return p;
 }
@@ -500,6 +543,7 @@
 
     state_task->set_param(0, (memaddr)enemy_part1->f);
     state_task->set_param(1, (memaddr)enemy_part5->f);
+    state_task->set_param(2, (memaddr)get_num());
 
     state_task->set_inData(0, p, sizeof(CHARACTER));
     state_task->set_inData(1, &count, sizeof(int));
@@ -536,6 +580,7 @@
     state_task->set_param(3, (memaddr)enemy_part4->f);
     state_task->set_param(4, (memaddr)enemystate[num1].charano);
     state_task->set_param(5, (memaddr)enemystate[num2].charano);
+    state_task->set_param(6, (memaddr)get_num());
 
     state_task->set_inData(0, p, sizeof(CHARACTER));
     state_task->set_inData(1, kyeenemyno, sizeof(CHARACTER));
@@ -566,6 +611,8 @@
     obj->flag = false;
     obj->length = 0;
 
+    state_task->set_param(0, (memaddr)get_num());
+
     state_task->set_inData(0, p, sizeof(CHARACTER));
     state_task->set_inData(1, &count, sizeof(int));
     
@@ -582,6 +629,32 @@
 
 
 CHARACTER*
+Boss5Task(CHARACTER *p)
+{
+    int task_num = p->task;
+    int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH;
+    HTaskPtr state_task = tmanager->create_task(task_num);
+    ObjContainerPtr obj = (ObjContainerPtr)tmanager->allocate(obj_size);
+    obj->flag = false;
+    obj->length = 0;
+
+    state_task->set_param(0, (memaddr)get_num());
+
+    state_task->set_inData(0, p, sizeof(CHARACTER));
+    state_task->set_inData(1, &jiki, sizeof(player));
+
+    state_task->set_outData(0, p, sizeof(CHARACTER));
+    state_task->set_outData(1, obj, 0);
+
+    state_task->set_post(checkContainer, (void*)p, (void*)obj);    
+    state_task->set_cpu(SPE_ANY);
+    state_task->spawn();
+    
+    return p;
+}
+
+
+CHARACTER*
 noaction(CHARACTER *p)
 {
   return p;
@@ -736,8 +809,8 @@
 CHARACTER*
 chara_state22(CHARACTER *p)
 {
-    p->task = STATE22;    
-    return SimpleStateTask(p);
+    p->task = STATE22;
+    return FixRandomTask(p);
 }
 
 
@@ -872,7 +945,8 @@
 }
 
 
-CHARACTER * chara_state400(CHARACTER *p)
+CHARACTER*
+chara_state400(CHARACTER *p)
 {
     p->task = STATE400;
     return SimpleStateTask(p);
@@ -944,7 +1018,7 @@
 chara_state601(CHARACTER *p)
 {
     p->task = STATE601;
-    return JikiContainerTask(p);
+    return Boss5Task(p);
 }
 
 
@@ -952,5 +1026,5 @@
 chara_state602(CHARACTER *p)
 {
     p->task = STATE602;
-    return sendContainerTask(p);
+    return Boss5Task(p);
 }