【Python】1時間で作る「ブロックくずし」/初心者プログラミング学習。

誰にでもできるプログラミング

プログラミングなんて、誰にだって簡単にできるものなんだ!
という事実を、広く世の中に伝えたい。

プログラミング学習で身につくプログラミング思考は、仕事に・・・いや人生のあらゆる問題解決にきっと生きるから。

ともかく、まずは始めてみませんか?

簡単に情報が手に入る時代

「はじめる」といっても、いきなりプログラミングスクールを探したり、入門書を求めに書店へ走ったりする必要はなくて・・・。

今は無料でたいがいの情報が手に入るありがたい時代。

パソコンがあれば、取り敢えずそれだけでOKです。

ちなみに、ボクがオススメする学習法は「ボクのYouTube動画」を観ること(≧◇≦)
(ぜひぜひ・・・)

知識を吸収・・・ではなく、実際に指を動かして体験することがプログラミングを習得する近道。

騙されたと思って試してみてください。
一週間から十日くらいで「ブロックくずし」程度は作れるようになりますよ。

簡易版ブロック崩しを作る

今回の言語は「Python」。
ボクがYouTubeで公開している「プログラミング」の入門動画。
ブロック崩しは「Python第7話」~「第9話」の全3回で完結となっています。
完全に未経験の方でも、第一話から進めてもらえたら、10日程度で作れます。ブロック崩し( ̄▽ ̄)

ちなみに・・・
第一回:ボールを動かす。
https://youtu.be/kEkJc3fpFkQ
第二回:ラケットを作る。
https://youtu.be/V6tsDbgbICU
第三回:ブロックの表示と仕上げ。
https://youtu.be/IuBoihkrLi8

ところで「簡易版」て、何が簡易なのかと言うと、次のような処理を手抜きしてます。

・ボールのスピードは変化しない。
・ボールの跳ね返る角度も一定。
・ラケットは上辺でのみボールヒットの判定。
・ブロックは下辺でのみボールヒットの判定。

プログラミングの初学者にはちょうど良いレベルだと思います。

コードは100行程度。
(ま、こんなもんだよね。)

既にある程度のプログラミングスキルがある方の役に立つようなモノは正直ないけれど、プログラミングを学び始めたばかりで「ブロック崩しなんて自分に作れるはずがない!」なんて思っている方は、是非動画を見てください。

プログラミングなんて・・・ホントに簡単なものなのだと、一人でも多くの方に感じて頂けたら、こんなに嬉しいことはない。

以下のコードは参考資料として。

############################
#####   ブロック崩し    #####
############################

import tkinter as tk
from tkinter import messagebox

#ウインドウ
win = tk.Tk()
win.title("ブロック崩し")
win.geometry("425x625")
win.resizable(False, False)

#キャンバス
can = tk.Canvas(bg="black", width=400, height=600)
can.place(x=10, y=10)

#ゲームオーバー
def gameOver():
    messagebox.showinfo("Information", "GAME OVER!")
    exit()

#ゲームクリア
def gameClear():
    messagebox.showinfo("Information", "CONGRATULATIONS!!!!")
    exit()

#ボール
ball_x = 50; ball_y = 500; bx = 5; by = -5
def drawBall():
    global ball_x, ball_y, bx, by
    can.create_oval(ball_x, ball_y, ball_x+20, ball_y+20, fill="white")
    if ball_x<=0 or ball_x>=385 :
        bx *= -1
    if ball_y<=0 :
        by *= -1
    if ball_y>=603 :
        gameOver()
    if ball_y>=560 and ball_x>=rack_x-10 and ball_x<=rack_x+50 :
        by *= -1
    ball_x += bx; ball_y += by

#ラケット
rack_x =170; keyPress_R = False; keyPress_L = False
def rightKeyPress(event):
    global keyPress_R
    keyPress_R = True
def rightKeyRelease(event):
    global keyPress_R
    keyPress_R = False
def leftKeyPress(event):
    global keyPress_L
    keyPress_L = True
def leftKeyRelease(event):
    global keyPress_L
    keyPress_L = False
win.bind("<KeyPress-Right>", rightKeyPress)
win.bind("<KeyRelease-Right>", rightKeyRelease)
win.bind("<KeyPress-Left>", leftKeyPress)
win.bind("<KeyRelease-Left>", leftKeyRelease)
def drawRacket():
    global rack_x
    can.create_rectangle(rack_x, 580, rack_x+60, 595, fill="white")
    if keyPress_R==True and rack_x<=350:
        rack_x += 5
    if keyPress_L==True and rack_x>=-10:
        rack_x -= 5

#ブロック
block = []
for x in range(5) :
    for y in range(4) :
        block.append({"x":x*80+5, "y":y*40+10, "st":1})
def drawBlock() :
    global ball_x, ball_y, by
    block_count = 0
    for i in range(len(block)):
        x = block[i]["x"]
        y = block[i]["y"]
        st = block[i]["st"]
        if ball_y<=y+30 and ball_x>=x-10 and ball_x<=x+60 and st==1 :
            by *= -1
            block[i]["st"] = 0
        if st==1 :
            can.create_rectangle(x, y, x+70, y+30, fill="white")
            block_count += 1
    if block_count == 0:
        gameClear()        

#表示ループ
def gameLoop():
    can.delete("all")
    drawBall()
    drawRacket()
    drawBlock()
    win.after(15, gameLoop)

gameLoop()

#ウインドウループ
win.mainloop()