Based on the array and text functions we learnt in class, I made a morse code converter for this week’s assignment. The converter has two modes. In the first mode, the user can enter up to five letters or numbers. The program will convert the input into morse code. In the second mode, the program will automatically generate five lines of Morse Code. The user then needs to enter the corresponding letter or number for each line of code. The screen will print Correct! if the user’s input is accurate.
Here’s my code for the program.
char[] letterArray = new char[5]; char[] patternArray = new char[5]; char letter_num = 0; float xPos = 50; float yPos; char letter; int count = 0; int count2 = 0; float diam = 20; int mode; int a_num; int b_num; int c_num; int correct = 0; void setup() { size(600, 600); } void draw() { background(0); yPos = -30; if (mode == 1) { println("Mode 1"); for (int j = 0; j < 5; j++) { yPos += 120; fill(random(0, 255), random(0, 255), random(0, 255)); textSize(100); letter = letterArray[j]; text(letter, xPos, yPos); drawcode(); } if (count == 5) { count = 0; char[] letterArray = new char[5]; } } if (mode == 2) { println("Mode 2"); for (int j = 0; j < 5; j++) { yPos += 120; drawcode(); fill(random(0, 255), random(0, 255), random(0, 255)); textSize(100); letter = patternArray[j]; text(letter, xPos, yPos); if (count == 5) { count = 0; char[] letterArray = new char[5]; } } if (char(letterArray[4]) > 0 && char(patternArray[4]) > 0) { check(); } } } void keyPressed() { //modes if (key == '-') { mode = 1; } if (key == '=') { mode = 2; } if (key == ' ') { //press space to restart mode = 0; letter_num = 0; a_num = 0; count = 0; count2 = 0; correct = 0; for (int a = 0; a < 5; a++) { letterArray[a] = 0; } for (int b = 0; b < 5; b++) { patternArray[b] = 0; } background(0); } if (mode == 1) { if (key != 61 && key != 45) { letter_num = key; //char letterArray[count] = letter_num; count += 1; } } if (mode == 2) { if (key == CODED) { a_num = round(random(97, 122)); //generate code of a random letter b_num = round(random(48, 57)); //generate code of a random number c_num = round(random(0, 1)); if (c_num == 0) { letterArray[count] = char(a_num); } if (c_num == 1) { letterArray[count] = char(b_num); } count += 1; } if (key != CODED && key != 61 && key != 45) { letter_num = key; patternArray[count2] = letter_num; count2 += 1; if (count2 == 5) { count2 = 0; char[] patternArray = new char[5]; } } } }
Functions:
void drawcode() { noStroke(); for (int p = 0; p < 5; p++) { int value = int(letterArray[p]); float y_ = -30+(p+1)*120-diam; float x_ = xPos+100; float rec_wid = 20; float rec_len = 70; float gap = 20; float radius = diam/2; fill(random(0, 255), random(0, 255), random(0, 255)); //fill(255); if (value == 97 || value == 65) { //A ellipse(x_, y_, diam, diam); rect(x_+radius+gap, y_-radius, rec_len, rec_wid); } if (value == 98 || value == 66) { //B rect(x_, y_-radius, rec_len, rec_wid); ellipse(x_+rec_len+gap+radius, y_, diam, diam); ellipse(x_+rec_len+gap*2+radius*3, y_, diam, diam); ellipse(x_+rec_len+gap*3+radius*5, y_, diam, diam); } if (value == 99 || value == 67) { //C rect(x_, y_-radius, rec_len, rec_wid); ellipse(x_+rec_len+gap+radius, y_, diam, diam); rect(x_+rec_len+gap*2+radius*2, y_-radius, rec_len, rec_wid); ellipse(x_+rec_len*2+gap*3+radius*3, y_, diam, diam); } if (value == 100 || value == 68) { //D rect(x_, y_-radius, rec_len, rec_wid); ellipse(x_+rec_len+gap+radius, y_, diam, diam); ellipse(x_+rec_len+gap*2+radius*3, y_, diam, diam); } if (value == 101 || value == 69) { //E ellipse(x_, y_, diam, diam); } if (value == 102 || value == 70) { //F ellipse(x_, y_, diam, diam); ellipse(x_+gap+radius*2, y_, diam, diam); rect(x_+gap*2+radius*3, y_-radius, rec_len, rec_wid); ellipse(x_+gap*3+radius*4+rec_len, y_, diam, diam); } if (value == 103 || value == 71) { //G rect(x_, y_-radius, rec_len, rec_wid); rect(x_+gap+rec_len, y_-radius, rec_len, rec_wid); ellipse(x_+gap*2+rec_len*2+radius, y_, diam, diam); } if (value == 104 || value == 72) { //H ellipse(x_, y_, diam, diam); ellipse(x_+gap+radius*2, y_, diam, diam); ellipse(x_+gap*2+radius*4, y_, diam, diam); ellipse(x_+gap*3+radius*6, y_, diam, diam); } if (value == 105 || value == 73) { //I ellipse(x_, y_, diam, diam); ellipse(x_+gap+radius*2, y_, diam, diam); } if (value == 106 || value == 74) { //J ellipse(x_, y_, diam, diam); rect(x_+radius+gap, y_-radius, rec_len, rec_wid); rect(x_+radius+gap*2+rec_len, y_-radius, rec_len, rec_wid); rect(x_+radius+gap*3+rec_len*2, y_-radius, rec_len, rec_wid); } if (value == 107 || value == 75) { //K rect(x_, y_-radius, rec_len, rec_wid); ellipse(x_+rec_len+gap+radius, y_, diam, diam); rect(x_+rec_len+gap*2+radius*2, y_-radius, rec_len, rec_wid); } if (value == 108 || value == 76) { //L ellipse(x_, y_, diam, diam); rect(x_+radius+gap, y_-radius, rec_len, rec_wid); ellipse(x_+radius*2+gap*2+rec_len, y_, diam, diam); ellipse(x_+radius*4+gap*3+rec_len, y_, diam, diam); } if (value == 109 || value == 77) { //M rect(x_, y_-radius, rec_len, rec_wid); rect(x_+gap+rec_len, y_-radius, rec_len, rec_wid); } if (value == 110 || value == 78) { //N rect(x_, y_-radius, rec_len, rec_wid); ellipse(x_+rec_len+gap+radius, y_, diam, diam); ellipse(x_+rec_len+gap*2+radius*3, y_, diam, diam); } if (value == 111 || value == 79) { //O rect(x_, y_-radius, rec_len, rec_wid); rect(x_+gap+rec_len, y_-radius, rec_len, rec_wid); rect(x_+gap*2+rec_len*2, y_-radius, rec_len, rec_wid); } if (value == 112 || value == 80) { //P ellipse(x_, y_, diam, diam); rect(x_+radius+gap, y_-radius, rec_len, rec_wid); rect(x_+radius+gap*2+rec_len, y_-radius, rec_len, rec_wid); ellipse(x_+radius*2+gap*3+rec_len*2, y_, diam, diam); } if (value == 113 || value == 81) { //Q rect(x_, y_-radius, rec_len, rec_wid); rect(x_+gap+rec_len, y_-radius, rec_len, rec_wid); ellipse(x_+gap*2+rec_len*2+radius, y_, diam, diam); rect(x_+gap*3+rec_len*2+radius*2, y_-radius, rec_len, rec_wid); } if (value == 114 || value == 82) { //R ellipse(x_, y_, diam, diam); rect(x_+radius+gap, y_-radius, rec_len, rec_wid); ellipse(x_+radius*2+gap*2+rec_len, y_, diam, diam); } if (value == 115 || value == 83) { //S ellipse(x_, y_, diam, diam); ellipse(x_+gap+radius*2, y_, diam, diam); ellipse(x_+gap*2+radius*4, y_, diam, diam); } if (value == 116 || value == 84) { //T rect(x_, y_-radius, rec_len, rec_wid); } if (value == 117 || value == 85) { //U ellipse(x_, y_, diam, diam); ellipse(x_+gap+radius*2, y_, diam, diam); rect(x_+gap*2+radius*3, y_-radius, rec_len, rec_wid); } if (value == 118 || value == 86) { //V ellipse(x_, y_, diam, diam); ellipse(x_+gap+radius*2, y_, diam, diam); ellipse(x_+gap*2+radius*4, y_, diam, diam); rect(x_+gap*3+radius*5, y_-radius, rec_len, rec_wid); } if (value == 119 || value == 87) { //W ellipse(x_, y_, diam, diam); rect(x_+radius+gap, y_-radius, rec_len, rec_wid); rect(x_+radius+gap*2+rec_len, y_-radius, rec_len, rec_wid); } if (value == 120 || value == 88) { //X rect(x_, y_-radius, rec_len, rec_wid); ellipse(x_+rec_len+gap+radius, y_, diam, diam); ellipse(x_+rec_len+gap*2+radius*3, y_, diam, diam); rect(x_+rec_len+gap*3+radius*4, y_-radius, rec_len, rec_wid); } if (value == 121 || value == 89) { //Y rect(x_, y_-radius, rec_len, rec_wid); ellipse(x_+rec_len+gap+radius, y_, diam, diam); rect(x_+rec_len+gap*2+radius*2, y_-radius, rec_len, rec_wid); rect(x_+rec_len*2+gap*3+radius*2, y_-radius, rec_len, rec_wid); } if (value == 122 || value == 90) { //Z rect(x_, y_-radius, rec_len, rec_wid); rect(x_+gap+rec_len, y_-radius, rec_len, rec_wid); ellipse(x_+gap*2+rec_len*2+radius, y_, diam, diam); ellipse(x_+gap*3+rec_len*2+radius*3, y_, diam, diam); } if (value == 48) { //0 rect(x_, y_-radius, rec_len, rec_wid); rect(x_+gap+rec_len, y_-radius, rec_len, rec_wid); rect(x_+gap*2+rec_len*2, y_-radius, rec_len, rec_wid); rect(x_+gap*3+rec_len*3, y_-radius, rec_len, rec_wid); rect(x_+gap*4+rec_len*4, y_-radius, rec_len, rec_wid); } if (value == 49) { //1 ellipse(x_, y_, diam, diam); rect(x_+radius+gap, y_-radius, rec_len, rec_wid); rect(x_+radius+gap*2+rec_len, y_-radius, rec_len, rec_wid); rect(x_+radius+gap*3+rec_len*2, y_-radius, rec_len, rec_wid); rect(x_+radius+gap*4+rec_len*3, y_-radius, rec_len, rec_wid); } if (value == 50) { //2 ellipse(x_, y_, diam, diam); ellipse(x_+gap+radius*2, y_, diam, diam); rect(x_+gap*2+radius*3, y_-radius, rec_len, rec_wid); rect(x_+gap*3+radius*3+rec_len, y_-radius, rec_len, rec_wid); rect(x_+gap*4+radius*3+rec_len*2, y_-radius, rec_len, rec_wid); } if (value == 51) { //3 ellipse(x_, y_, diam, diam); ellipse(x_+gap+radius*2, y_, diam, diam); ellipse(x_+gap*2+radius*4, y_, diam, diam); rect(x_+gap*3+radius*5, y_-radius, rec_len, rec_wid); rect(x_+gap*4+radius*5+rec_len, y_-radius, rec_len, rec_wid); } if (value == 52) { //4 ellipse(x_, y_, diam, diam); ellipse(x_+gap+radius*2, y_, diam, diam); ellipse(x_+gap*2+radius*4, y_, diam, diam); ellipse(x_+gap*3+radius*6, y_, diam, diam); rect(x_+gap*4+radius*7, y_-radius, rec_len, rec_wid); } if (value == 53) { //5 ellipse(x_, y_, diam, diam); ellipse(x_+gap+radius*2, y_, diam, diam); ellipse(x_+gap*2+radius*4, y_, diam, diam); ellipse(x_+gap*3+radius*6, y_, diam, diam); ellipse(x_+gap*4+radius*8, y_, diam, diam); } if (value == 54) { //6 rect(x_, y_-radius, rec_len, rec_wid); ellipse(x_+rec_len+gap+radius, y_, diam, diam); ellipse(x_+rec_len+gap*2+radius*3, y_, diam, diam); ellipse(x_+rec_len+gap*3+radius*5, y_, diam, diam); ellipse(x_+rec_len+gap*4+radius*7, y_, diam, diam); } if (value == 55) { //7 rect(x_, y_-radius, rec_len, rec_wid); rect(x_+gap+rec_len, y_-radius, rec_len, rec_wid); ellipse(x_+gap*2+rec_len*2+radius, y_, diam, diam); ellipse(x_+gap*3+rec_len*2+radius*3, y_, diam, diam); ellipse(x_+gap*4+rec_len*2+radius*5, y_, diam, diam); } if (value == 56) { //8 rect(x_, y_-radius, rec_len, rec_wid); rect(x_+gap+rec_len, y_-radius, rec_len, rec_wid); rect(x_+gap*2+rec_len*2, y_-radius, rec_len, rec_wid); ellipse(x_+gap*3+rec_len*3+radius, y_, diam, diam); ellipse(x_+gap*4+rec_len*3+radius*3, y_, diam, diam); } if (value == 57) { //9 rect(x_, y_-radius, rec_len, rec_wid); rect(x_+gap+rec_len, y_-radius, rec_len, rec_wid); rect(x_+gap*2+rec_len*2, y_-radius, rec_len, rec_wid); rect(x_+gap*3+rec_len*3, y_-radius, rec_len, rec_wid); ellipse(x_+gap*4+rec_len*4+radius, y_, diam, diam); } } } void check() { int correct = 0; for (int i = 0; i < 5; i++) { if (letterArray[i] == patternArray[i]) { correct += 1; } } if (correct == 5){ background(0); fill(255); textSize(50); text("Correct!",100,250); xPos = random(0,width); yPos = random(0,height); drawcode(); } }