🖮 🖮 🖮
今天想做 打字遊戲
先下載一張鍵盤的圖片
💾 程式碼存檔區PImage img; void setup(){ size(800,600); img = loadImage("keyboard.jpg"); } void draw(){ image(img,0,600-296); }
讀入圖片(一樣記得拉進來哦)
位置設定 600-296? 因為這張圖高度296 視窗開600 所以600-296讓鍵盤圖片貼底
想讓按鍵盤的同時 顯示我們按了什麼鍵一步一步來💾 程式碼存檔區PImage img; void setup(){ size(800,600); img = loadImage("keyboard.jpg"); rectMode(CENTER); } void draw(){ background(#FFFFF2);//淡黃色背景 image(img,0,600-296); fill(255,0,0,128);//128半透明 rect(mouseX,mouseY,43,43,5);//5圓滑 } void mousePressed(){ println(mouseX,mouseY);//定位、印出mouse座標 }首先讓滑鼠對齊方塊中心然後鍵出一個方塊fill(r,g,b,a)a是透明度rect(mouseX,mouseY,43,43,5)方塊的位置跟著滑鼠x y移動 大小是取決於圖片的鍵盤 最後一個5 是讓四方形周圍圓滑當按下滑鼠時 小黑會秀出位置既然可以秀出位置 那現在依序點完從小黑中複製所有點打開notepad++ 貼上 選中間空格 crtl h 取代 空格便逗號把尾巴的跳行 取代成 },{💾 程式碼存檔區PImage img; int [][] pos ={{114,472},{336,523},{236,523},{214,472},{191,421},{264,472},{314,472},{364,472},{441,421},{414,473},{464,473},{514,472},{437,523},{386,524},{490,421},{541,421},{91,420},{240,421},{164,472},{291,420},{390,420},{286,523},{140,421},{185,523},{340,421},{136,524}}; void setup(){ size(800,600); img = loadImage("keyboard.jpg"); rectMode(CENTER); } void draw(){ background(#FFFFF2);//淡黃色背景 image(img,0,600-296); fill(255,0,0,128);//128半透明紅色 rect(mouseX,mouseY,43,43,5);//5圓滑 fill(0,255,0,128);//半透明的綠色 for(int i=0;i<26;i++){ rect(pos[i][0],pos[i][1],43,43,5); } } void mousePressed(){ println(mouseX,mouseY);//定位、印出mouse座標 }int[][] a={}; 是 java 中二維陣列寫法淺綠色加在格子上 用for迴圈放到每個字母上手動點可能點歪 不開心然後我們想知道 現在鍵盤按了誰💾 程式碼存檔區PImage img; int [][] pos ={{114,472},{336,523},{236,523},{214,472},{191,421},{264,472},{314,472},{364,472},{441,421},{414,473},{464,473},{514,472},{437,523},{386,524},{490,421},{541,421},{91,420},{240,421},{164,472},{291,420},{390,420},{286,523},{140,421},{185,523},{340,421},{136,524}}; void setup(){ size(800,600); img = loadImage("keyboard.jpg"); rectMode(CENTER); } void draw(){ background(#FFFFF2);//淡黃色背景 image(img,0,600-296); fill(255,0,0,128);//128半透明紅色 rect(mouseX,mouseY,43,43,5);//5圓滑 fill(0,255,0,128);//半透明的綠色 for(int i=0;i<26;i++){ if(pressed[i])rect(pos[i][0],pos[i][1],43,43,5); } } boolean [] pressed = new boolean[26];//java的陣列宣告 都是0或false void keyPressed(){ if(key>='a'&&key<='z')pressed[key-'a']=true; } void keyReleased(){ if(key>='a'&&key<='z')pressed[key-'a']=false; } void mousePressed(){ println(mouseX,mouseY);//定位、印出mouse座標 }宣告 boolean [] pressed 一開始都是0或false如果壓下 a pressed[key-'a']=true所以去上面 if(pressed[i])rect(pos[i][0],pos[i][1],43,43,5) 綠色印出位置現在要配合打字啦規則:上方會出現 要打的單字💾 程式碼存檔區PImage img; int [][] pos ={{114,472},{336,523},{236,523},{214,472},{191,421},{264,472},{314,472},{364,472},{441,421},{414,473},{464,473},{514,472},{437,523},{386,524},{490,421},{541,421},{91,420},{240,421},{164,472},{291,420},{390,420},{286,523},{140,421},{185,523},{340,421},{136,524}}; void setup(){ size(800,600); img = loadImage("keyboard.jpg"); rectMode(CENTER); } void draw(){ background(#FFFFF2);//淡黃色背景 image(img,0,600-296); fill(255,0,0,128);//128半透明紅色 rect(mouseX,mouseY,43,43,5);//5圓滑 fill(0,255,0,128);//半透明的綠色 for(int i=0;i<26;i++){ if(typing.charAt(0)-'a'==i)rect(pos[i][0],pos[i][1],43,43,5); if(pressed[i])rect(pos[i][0],pos[i][1],43,43,5); } fill(0);//黑色的字 textSize(50); text(typing,50,80); text(typing.charAt(0),50,120);//現在要打的字是 typing.charAt(0) } String typing = "printf"; boolean [] pressed = new boolean[26];//java的陣列宣告 都是0或false void keyPressed(){ if(key>='a'&&key<='z')pressed[key-'a']=true; } void keyReleased(){ if(key>='a'&&key<='z')pressed[key-'a']=false; } void mousePressed(){ println(mouseX,mouseY);//定位、印出mouse座標 }現在要秀出目標文字String typing = "printf"抓到第一個字元 讓他的鍵盤秀顏色charAt() 參考文件 去抓字💾 程式碼存檔區PImage img; int [][] pos ={{114,472},{336,523},{236,523},{214,472},{191,421},{264,472},{314,472},{364,472},{441,421},{414,473},{464,473},{514,472},{437,523},{386,524},{490,421},{541,421},{91,420},{240,421},{164,472},{291,420},{390,420},{286,523},{140,421},{185,523},{340,421},{136,524}}; void setup(){ size(800,600); img = loadImage("keyboard.jpg"); rectMode(CENTER); } void draw(){ background(#FFFFF2);//淡黃色背景 image(img,0,600-296); fill(255,0,0,128);//128半透明紅色 rect(mouseX,mouseY,43,43,5);//5圓滑 fill(0,255,0,128);//半透明的綠色 for(int i=0;i<26;i++){ if(typing.charAt(ID)-'a'==i)rect(pos[i][0],pos[i][1],43,43,5); if(pressed[i])rect(pos[i][0],pos[i][1],43,43,5); } fill(0);//黑色的字 textSize(50); text(typing,50,80); //要打的字 fill(255,0,0);//紅色 text(typed+typing.charAt(ID),50,120);//現在要打的字是 fill(0); text(typed,50,120); //已經打好的字 } String typing = "printfprintfprintf"; String typed = "";//一開始打了0個字 int ID = 0; //第幾個字母要被打 boolean [] pressed = new boolean[26];//java的陣列宣告 都是0或false void keyPressed(){ if(key>='a'&&key<='z'){ pressed[key-'a']=true; typed += key; ID++; } } void keyReleased(){ if(key>='a'&&key<='z')pressed[key-'a']=false; } void mousePressed(){ println(mouseX,mouseY);//定位、印出mouse座標 }加入 typed 已經打好的 一開始是空的 打0個字ID 記錄第幾個字母要打現在要打的字母改寫成 typed+typing.charAt(ID) 黑黑的已打好的+紅紅的現在要打的字上面鍵盤的選色也變成秀出現在要打的鍵盤這樣就能對照打字啦但是程式還有bug 打超過陣列大小會當機打錯字呢?現在打錯字會糊弄過去應該要告訴他 你錯了!💾 程式碼存檔區PImage img; int [][] pos ={{114,472},{336,523},{236,523},{214,472},{191,421},{264,472},{314,472},{364,472},{441,421},{414,473},{464,473},{514,472},{437,523},{386,524},{490,421},{541,421},{91,420},{240,421},{164,472},{291,420},{390,420},{286,523},{140,421},{185,523},{340,421},{136,524}}; void setup(){ size(800,600); img = loadImage("keyboard.jpg"); rectMode(CENTER); } void draw(){ background(#FFFFF2);//淡黃色背景 image(img,0,600-296); fill(255,0,0,128);//128半透明紅色 rect(mouseX,mouseY,43,43,5);//5圓滑 fill(0,255,0,128);//半透明的綠色 for(int i=0;i<26;i++){ if(typing.charAt(ID)-'a'==i)rect(pos[i][0],pos[i][1],43,43,5); if(pressed[i])rect(pos[i][0],pos[i][1],43,43,5); } fill(0);//黑色的字 textSize(50); text(typing,50,80); //要打的字 fill(255,0,0);//紅色 text(typed+typing.charAt(ID),50,120);//現在要打的字是 fill(0); text(typed,50,120); //已經打好的字 } String typing = "printfprintfprintf"; String typed = "";//一開始打了0個字 int ID = 0; //第幾個字母要被打 boolean [] pressed = new boolean[26];//java的陣列宣告 都是0或false void keyPressed(){ if(key>='a'&&key<='z'){ if(key==typing.charAt(ID)){ //字母正確就往下 pressed[key-'a']=true; typed += key; ID++; }else{ background(255,0,0); //背景閃爍紅色 } } } void keyReleased(){ if(key>='a'&&key<='z')pressed[key-'a']=false; } void mousePressed(){ println(mouseX,mouseY);//定位、印出mouse座標 }如果字母正確就繼續做印字如果不正確是吧 背景用紅色閃瞎你要解決 超過陣列大小後當機問題且printf~打完後 可以換下個字💾 程式碼存檔區PImage img; int [][] pos ={{114,472},{336,523},{236,523},{214,472},{191,421},{264,472},{314,472},{364,472},{441,421},{414,473},{464,473},{514,472},{437,523},{386,524},{490,421},{541,421},{91,420},{240,421},{164,472},{291,420},{390,420},{286,523},{140,421},{185,523},{340,421},{136,524}}; void setup(){ size(800,600); img = loadImage("keyboard.jpg"); rectMode(CENTER); } void draw(){ background(#FFFFF2);//淡黃色背景 image(img,0,600-296); fill(255,0,0,128);//128半透明紅色 rect(mouseX,mouseY,43,43,5);//5圓滑 fill(0,255,0,128);//半透明的綠色 for(int i=0;i<26;i++){ if(ID<typing.length() && typing.charAt(ID)-'a'==i)rect(pos[i][0],pos[i][1],43,43,5); if(pressed[i])rect(pos[i][0],pos[i][1],43,43,5); } fill(0);//黑色的字 textSize(50); text(typing,50,80); //要打的字 fill(255,0,0);//紅色 if(ID<typing.length())text(typed+typing.charAt(ID),50,120);//現在要打的字是 fill(0); text(typed,50,120); //已經打好的字 } String typing = "printfprintfprintf"; String typed = "";//一開始打了0個字 int ID = 0; //第幾個字母要被打 boolean [] pressed = new boolean[26];//java的陣列宣告 都是0或false void keyPressed(){ if(key>='a'&&key<='z'){ if(ID<typing.length() && key==typing.charAt(ID)){ //字母正確就往下 pressed[key-'a']=true; typed += key; ID++; }else{ background(255,0,0); //背景閃爍紅色 } } } void keyReleased(){ if(key>='a'&&key<='z')pressed[key-'a']=false; } void mousePressed(){ println(mouseX,mouseY);//定位、印出mouse座標 }ID要小於已經打好的字的長度意思就是ID不會大於要打的字的長度程式準備高級起來了💾 程式碼存檔區PImage img; int [][] pos ={{114,472},{336,523},{236,523},{214,472},{191,421},{264,472},{314,472},{364,472},{441,421},{414,473},{464,473},{514,472},{437,523},{386,524},{490,421},{541,421},{91,420},{240,421},{164,472},{291,420},{390,420},{286,523},{140,421},{185,523},{340,421},{136,524}}; void setup(){ size(800,600); img = loadImage("keyboard.jpg"); rectMode(CENTER); } void draw(){ background(#FFFFF2);//淡黃色背景 image(img,0,600-296); fill(255,0,0,128);//128半透明紅色 rect(mouseX,mouseY,43,43,5);//5圓滑 fill(0,255,0,128);//半透明的綠色 for(int i=0;i<26;i++){ if(ID<typing.length() && typing.charAt(ID)-'a'==i)rect(pos[i][0],pos[i][1],43,43,5); if(pressed[i])rect(pos[i][0],pos[i][1],43,43,5); } fill(0);//黑色的字 textSize(50); text(typing,50,80); //要打的字 fill(255,0,0);//紅色 if(ID<typing.length())text(typed+typing.charAt(ID),50,120);//現在要打的字是 fill(0); text(typed,50,120); //已經打好的字 } String typing = "printf is a fuction"; String typed = "";//一開始打了0個字 int ID = 0; //第幾個字母要被打 boolean [] pressed = new boolean[26];//java的陣列宣告 都是0或false void keyPressed(){ if(ID<typing.length() && key==typing.charAt(ID)){ if(key>='a'&&key<='z'){ pressed[key-'a']=true; typed += key; ID++; }else if(key == ' '){ typed += key; ID++; }else{ background(255,0,0); //背景閃爍紅色 } } } void keyReleased(){ if(key>='a'&&key<='z')pressed[key-'a']=false; } void mousePressed(){ println(mouseX,mouseY);//定位、印出mouse座標 }大改一下,一樣是把字限定在範圍內 如果字母正確就往下是英文字母大小寫就大小寫如果是空格(或是其他)就繼續往下走如果都不是 閃爍!





沒有留言:
張貼留言