チーム1432

課題名

電子錠

研究者名

2年15組3番 飯岡大貴
2年15組4番 池田将太

概要

3つの数字を当てるゲーム
課題 写真2.jpg


ソースコード


#include <m8c.h>
#include "PSoCAPI.h"
#include <stdio.h>
#include<stdlib.h>

void main(void)
{
  char* strPtr;

  int num1;
   int num2;
   int num3;
   int i=0;
   int j=3;
   int k=5;
   int h=8;

  UART_CmdReset();
   UART_IntCntl(UART_ENABLE_RX_INT);
   Counter8_WritePeriod(155);
   Counter8_WriteCompareValue(77);
   Counter8_Start();
   UART_Start(UART_PARITY_NONE);
   M8C_EnableGInt;
   LCD_1_Start();
   LCD_1_PrCString("Password?");
   UART_CPutString("\r\nInput 3numbers\r\n");

  while(1){
       if(UART_bCmdCheck()){
           if(strPtr = UART_szGetParam()){
               UART_PutString(strPtr);
               UART_CPutString(" ");
               num1=atoi(strPtr);
               if(num1==j){
                   LCD_1_Position (0,0);
                   LCD_1_PrCString("2 ");
               }
               else if(num1==k| |num1==h){
                   LCD_1_Position (0,0);
                   LCD_1_PrCString("1 ");
               }
               else{
                   LCD_1_Position (0,0);
                   LCD_1_PrCString("0 ");
                   }
                   
               if(strPtr = UART_szGetParam()){
                   UART_PutString(strPtr);
                   UART_CPutString(" ");
                   num2=atoi(strPtr);
                   if(num2==k){
                       LCD_1_Position (0,2);
                       LCD_1_PrCString("2 ");
                   }
                   else if(num2==j| |num2==h){
                       LCD_1_Position (0,2);
                       LCD_1_PrCString("1 ");
                   }
                   else{
                       LCD_1_Position (0,2);
                       LCD_1_PrCString("0 ");
                       }
                   
                   if(strPtr = UART_szGetParam()){
                       UART_PutString(strPtr);
                       UART_CPutString(" \r\n");
                       num3=atoi(strPtr);
                       if(num3==h){
                           LCD_1_Position (0,4);
                           LCD_1_PrCString("2           ");
                       }
                       else if(num3==j| |num3==k){
                           LCD_1_Position (0,4);
                           LCD_1_PrCString("1           ");
                       }
                       else{
                           LCD_1_Position (0,4);
                           LCD_1_PrCString("0           ");
                       }
                       
                       if(num1==j&&num2==k&&num3==h){
                           PGA_1_Start(PGA_1_HIGHPOWER);
                           PWM8_1_Start();
                           PWM8_2_Start();
                           BPF2_1_Start(BPF2_1_HIGHPOWER);
                           LCD_1_Position (0,0);
                           LCD_1_PrCString("Unlocked        ");
                           UART_CPutString("Congratulation");
                           break;
                       }
                   }
               }
           i++;
           if(i==5){
               PGA_2_Start(PGA_2_HIGHPOWER);
               PWM8_3_Start();
               PWM8_4_Start();
               BPF2_2_Start(BPF2_2_HIGHPOWER);
               UART_CPutString("Error");
               LCD_1_Position (0,0);
               LCD_1_PrCString("Error           ");
               break;
           }
           UART_CmdReset();
           }
       }
   }    
}



ゲーム内容

指定された3桁の数字を当てるゲーム。
プレイヤーには5回のチャンスが与えられる。
プレイヤーはまず指定された3桁の数字を想像して数字を打ち込む
このとき、その数が桁数も値もあっているときに2
値のみがあっているときに1。
値が違うときに0がLCDに表示される。
以上の工程を答えを推理しながら繰り返す。
5回以内に指定された3桁の数字を当てることができればLEDが点滅し、プレイヤーの勝利となる。
見つけることができなかった場合はブザーが鳴り、失敗となる。


考察

参考としたラボはbpf,uart_1,hello_worldである

このプログラムの欠点として3桁でなく1桁、2桁の数字を入力した時に1回の入力とみなされること、4桁以上が入力可能な(ただし、上位3桁のみが出力される)こと、そして1つの桁に対し、10以上の値を入力できることがあげられる。
4桁以上の入力の問題点に関しては、仕様により、Enterキーを押さなければ入力値が反映されないためと考えた。
その他二つについては解決策が思いつかなかったため、プレイヤー側が注意することで回避したい。

また、1桁を入力するたびにスペースを押す必要がある点も考えられる。
この改善点としては3桁の数字を入力し、それをatoi関数でint型変数に変換した後、10で割った余りを求め、それを上のプログラムのように場合分けすることで実現可能だっただろう。
しかし、時間内に実現することが厳しそうであったため、断念した。

工夫点としては、LEDとブザーで成否の判定を行った点である。
似たようなbpfを二つ用意し、それぞれのPWMに送る周波数の値を成功がVC3、失敗がVC2とすることで差別化を図った。
また、入力したchar型の文字を数字として判別するためにatoi関数を用いてそれらをint型変数へと変換した。

  • 最終更新:2014-07-15 14:48:48

このWIKIを編集するにはパスワード入力が必要です

認証パスワード