第一篇:達(dá)內(nèi)IT培訓(xùn)學(xué)習(xí)心得
在達(dá)內(nèi)為期兩周的實(shí)習(xí)時(shí)間已悄然離去,剛來(lái)時(shí)的那種新鮮好奇早飛到了九霄云外,更多的是離開時(shí)的那種不舍和對(duì)自己及所學(xué)的反思。
當(dāng)我第一天來(lái)這里時(shí),和其他同學(xué)一樣懷著興奮得心情踏進(jìn)達(dá)內(nèi)IT培訓(xùn)中心,或許是單純的對(duì)這個(gè)新環(huán)境的好奇、也或許是曾經(jīng)對(duì)這兒有一點(diǎn)了解想親自見證一下,因?yàn)槁牬蠖膶W(xué)長(zhǎng)說(shuō)只有來(lái)到達(dá)內(nèi)才能學(xué)到與學(xué)校不同的東西,才能更接近實(shí)際項(xiàng)目工程。的確如他們所說(shuō),運(yùn)行程序前必須作許多準(zhǔn)備工作,如:在ClassView內(nèi)的CSDIDemoDoc文檔內(nèi)創(chuàng)建變量或增加成員函數(shù);在ResourceView內(nèi)創(chuàng)建快捷鍵或增加菜單項(xiàng)??當(dāng)然做成功一個(gè)項(xiàng)目必須先寫好需求分析。
就這樣既興奮又好奇的跟著老師一步一步往下走,跟著在鍵盤上忙碌的敲代碼、調(diào)整程序。實(shí)習(xí)時(shí)間慢慢的在減少,而程序卻相反——越來(lái)越難,越來(lái)越繁。因?yàn)橐粋€(gè)小環(huán)節(jié)與大家拉開了距離,在一個(gè)龐大的項(xiàng)目中是不允許任何一處掉鏈子的。看到同學(xué)們?cè)缫选拜p車熟路”操作自如了,而我卻不知所措,立刻就有了壓力。一天下來(lái)感受最深的就是那種巨大的差距。學(xué)校所學(xué)與實(shí)際應(yīng)用中的脫節(jié)。
在我困惑與迷茫時(shí),老師給我解釋說(shuō):“咱用的編程軟件是VC6.0,更加注重的是對(duì)學(xué)生實(shí)戰(zhàn)能力的培養(yǎng),在學(xué)校所學(xué)專業(yè)知識(shí)的基礎(chǔ)上讓我們學(xué)習(xí)最新的編程技術(shù),通過(guò)做項(xiàng)目的方式來(lái)讓我們明白實(shí)踐中的編程到底是怎樣的??”正是冀老師的耐心講解讓我重新找回了自信,幾天下來(lái)從簡(jiǎn)單的c++程序到第一個(gè)win32程序,從MFC到第一個(gè)Dialog??雖然程序中還是有太多的疑惑但更多的是增長(zhǎng)了見識(shí)看清了差距。
通過(guò)實(shí)際項(xiàng)目的開發(fā)我有以下幾點(diǎn)收獲:
1.多向老師、同學(xué)虛心請(qǐng)教,也別說(shuō)自己學(xué)的不怎么樣,不然會(huì)大大減少自己的自信,從而與大家的差距越來(lái)越大。
2.編程以前一定要對(duì)整個(gè)項(xiàng)目有仔細(xì)的了解,最好能寫好需求分析,這樣在實(shí)際操作時(shí)就會(huì)更加調(diào)理,而且不會(huì)遺漏東西。
3.做任何項(xiàng)目都離不開團(tuán)隊(duì)合作。所以我們一定要注意團(tuán)隊(duì)合作意識(shí),多和小組內(nèi)的人交流。
4.在編程中一定要規(guī)范,絕對(duì)不可以隨性
在達(dá)內(nèi)的這半個(gè)月培訓(xùn)我感覺獲益匪淺。雖然與課本知識(shí)不同,至少我看清了實(shí)際做項(xiàng)目與書本知識(shí)之間的差距,不至于在就業(yè)后手足無(wú)措。這次實(shí)習(xí)對(duì)我以后的學(xué)習(xí)甚至就業(yè)帶來(lái)了巨大的幫助。
感謝學(xué)校,感謝達(dá)內(nèi)的王老師,冀老師。
第二篇:達(dá)內(nèi)培訓(xùn)總結(jié)
達(dá)內(nèi)培訓(xùn)總結(jié)
今年的7月初我和大多數(shù)達(dá)內(nèi)學(xué)員一樣,興奮的進(jìn)入了達(dá)內(nèi)進(jìn)行培訓(xùn),開始了C/C++的培訓(xùn)學(xué)習(xí),轉(zhuǎn)眼間4個(gè)多月已經(jīng)過(guò)了,也結(jié)束了我們培訓(xùn)課程。雖然自己學(xué)的是軟件技術(shù)專業(yè),但自己在來(lái)達(dá)內(nèi)之前也沒有接觸過(guò)C跟C++,既然走在了這條路上,我想我會(huì)一直走在這條路上,給自己的這四個(gè)月來(lái)說(shuō)下幾點(diǎn):
1、端正自己學(xué)習(xí)的態(tài)度
在課程學(xué)習(xí)中如何端正自己的態(tài)度也是很重要的。在達(dá)內(nèi)學(xué)習(xí)的過(guò)程中,每門課的時(shí)間都是很緊的,每天很辛苦,我也想過(guò)自己到底自己要不要學(xué)C/C++,但是自己還是保持了下來(lái),有一個(gè)良好的心態(tài)去接受新的東西,哪些是自己懂的,哪些是自己不會(huì)的,自己還是要有一個(gè)計(jì)劃,跟不上老師的講課進(jìn)度,也要試著去趕上老師的進(jìn)度,調(diào)整自己的學(xué)習(xí)方法。
2、編程當(dāng)作興趣
在學(xué)習(xí)之初感覺編程很枯燥,所以自己還是要培養(yǎng)出對(duì)編程的興趣。一開始其實(shí)多編程的興趣也不是很大,只是慢慢習(xí)慣了枯燥,不是很感興趣只要裝著很感興趣,久而久之開始對(duì)編程有了興趣,正所謂興趣才是最后的老師。
3、多敲敲代碼
程序員是代碼敲出來(lái)。在達(dá)內(nèi),每天學(xué)的東西到很多而且新的理論知識(shí)也多,然而那只是理論,和實(shí)際的應(yīng)用還有很大差距,而這些差距只有在實(shí)際的代碼編寫中我們才能體會(huì)出來(lái)。所以還是每天堅(jiān)持多敲敲多練練??傊刻煲WC一定量的代碼,這樣我們才會(huì)有真正水平上的提高。另外,在實(shí)際動(dòng)手的過(guò)程中,還要多留心編譯器錯(cuò)誤提示,也有助于我們對(duì)語(yǔ)言的學(xué)習(xí)和理解。
4、多堅(jiān)持一下
學(xué)習(xí)C/C++畢竟是非??菰锏囊患虑?,雖然我們可以培養(yǎng)自己的興趣,但是4個(gè)月的時(shí)間畢竟很讓人疲勞、很累,隨著時(shí)間的推移,我們剛開始時(shí)的興奮勁也慢慢減退了,有什么感覺沒什么希望,我們能做的就只有多堅(jiān)持一下,忍得住寂寞,才守得住陣地,保得住成果。自己還是踏踏實(shí)實(shí)的堅(jiān)持完成這4個(gè)月的學(xué)習(xí),還一直在堅(jiān)持。
其他的也沒有什么要說(shuō)的,一切多看自己的能力。
第三篇:達(dá)內(nèi)培訓(xùn)管理制度
達(dá)內(nèi)培訓(xùn)管理制度
“無(wú)以規(guī)矩,不成方圓”,嚴(yán)謹(jǐn)?shù)膶W(xué)習(xí)紀(jì)律是優(yōu)秀學(xué)習(xí)效果的保障。為樹立勤奮、刻苦的優(yōu)良學(xué)風(fēng),嚴(yán)肅學(xué)習(xí)紀(jì)律,督促、引導(dǎo)學(xué)員努力學(xué)習(xí),制訂本制度。
第一部分課堂與練習(xí)1、2、3、4、學(xué)員上課期間一律不得會(huì)客。學(xué)員上課期間須關(guān)閉手機(jī)或?qū)⑹謾C(jī)處于震動(dòng)狀態(tài),并且不得接打電話。未經(jīng)教學(xué)管理老師允許并辦理相關(guān)手續(xù),任何學(xué)員不得于非所在班級(jí)聽課。任何教室,在任何學(xué)習(xí)與練習(xí)時(shí)間,只得用于授課和學(xué)員學(xué)習(xí),學(xué)員不得玩游戲、閱讀與學(xué)習(xí)無(wú)
關(guān)書籍或進(jìn)行任何與學(xué)習(xí)無(wú)關(guān)活動(dòng)。
5、任何學(xué)員,在任何學(xué)習(xí)與練習(xí)時(shí)間,須保持安靜,不得大聲喧嘩,干擾課程秩序、影響他人學(xué)習(xí)。第二部分考勤、紀(jì)律1、2、3、考勤工作由教學(xué)管理員負(fù)責(zé),教學(xué)管理員檢查并記錄學(xué)生的出勤情況。所有學(xué)員須準(zhǔn)時(shí)到達(dá)課堂,努力學(xué)習(xí),不得遲到、早退、曠課。學(xué)員在規(guī)定課程時(shí)間未按時(shí)到達(dá)教室,視為遲到。學(xué)生在培訓(xùn)期限內(nèi)遲到次數(shù)累計(jì)三次,處以警
告和批評(píng);在培訓(xùn)期限內(nèi)遲到次數(shù)累計(jì)超過(guò)五次者取消培訓(xùn)資格。
4、學(xué)員在培訓(xùn)期限內(nèi)未經(jīng)請(qǐng)假或請(qǐng)假未獲得批準(zhǔn),擅自缺課,視為曠課。在培訓(xùn)期限內(nèi)曠課次數(shù)累
計(jì)超過(guò)五次者,取消培訓(xùn)資格。
5、如學(xué)員身體不適,不能堅(jiān)持正常學(xué)習(xí),須持醫(yī)院有效證明向教學(xué)管理員請(qǐng)假,并辦理病假手續(xù)。
如學(xué)員在達(dá)內(nèi)學(xué)習(xí)期間發(fā)生心理或身體上的重大疾病,應(yīng)及早向達(dá)內(nèi)提出書面報(bào)告,及早請(qǐng)假就醫(yī),以免耽誤治療。
6、學(xué)習(xí)期間不得請(qǐng)事假。如遇特殊情況,須向教學(xué)管理員提出申請(qǐng),獲得同意后方可休假。學(xué)員在達(dá)內(nèi)學(xué)習(xí)期間,不得用言詞或其它方式侮辱他人;不得尋釁滋事、打架斗毆。
第三部分成績(jī)考核
1、考核是檢驗(yàn)教學(xué)效果、保證教學(xué)質(zhì)量的重要手段,其目的在于指導(dǎo)和督促學(xué)員系統(tǒng)復(fù)習(xí)和鞏固所
學(xué)知識(shí)與技能,檢驗(yàn)理解程度與靈活運(yùn)用能力。
2、學(xué)員的考核由任課教師負(fù)責(zé)實(shí)施并根據(jù)課程進(jìn)度定期進(jìn)行。
3、考核有通常課堂測(cè)驗(yàn)、單門課程考試、項(xiàng)目實(shí)戰(zhàn)考評(píng)三種類型。
4、學(xué)員實(shí)習(xí)結(jié)束的成績(jī)由日常成績(jī)綜合確定。
第四部分教室1、2、3、4、5、6、1、2、學(xué)員須服從達(dá)內(nèi)公司的安排,在公司指定和規(guī)定的教室學(xué)習(xí)。達(dá)內(nèi)指定教室供學(xué)員自由練習(xí),自由練習(xí)時(shí)間由教學(xué)管理部門和行政部協(xié)商后作出規(guī)定。學(xué)員在結(jié)束學(xué)習(xí)和練習(xí)后須自覺關(guān)機(jī)。學(xué)員須愛護(hù)、小心使用所有設(shè)施設(shè)備,不得損壞,否則,除給予違紀(jì)處理外,須照價(jià)賠償。學(xué)員須保持室內(nèi)清潔衛(wèi)生,嚴(yán)禁吸煙,嚴(yán)禁隨地吐痰,亂丟雜物。教室內(nèi)嚴(yán)禁用餐。第五部分機(jī)房 達(dá)內(nèi)所有機(jī)房由MIS部統(tǒng)一管理,所有學(xué)員須根據(jù)規(guī)定使用計(jì)算機(jī)。嚴(yán)禁于機(jī)房?jī)?nèi)利用計(jì)算機(jī)從事任何娛樂(lè)活動(dòng),如游戲、看電影等,否則,達(dá)內(nèi)公司有權(quán)要求進(jìn)行
娛樂(lè)活動(dòng)的學(xué)員支付使用計(jì)算機(jī)及其它相關(guān)費(fèi)用,并要求恢復(fù)計(jì)算機(jī)初始狀態(tài),包括但不限于格式化或ghost鏡象恢復(fù)。
學(xué)員安裝學(xué)習(xí)軟件,須向MIS部提出申請(qǐng),經(jīng)審核同意后方可實(shí)施。不得下載、安裝各種計(jì)算機(jī)程序,否則,造成系統(tǒng)崩潰、病毒傳播等惡劣后果由違反人承擔(dān)所造成的一切損失。
嚴(yán)禁私自挪動(dòng)、更換計(jì)算機(jī)設(shè)備。如有發(fā)生,按實(shí)物價(jià)值5-10倍賠償。
嚴(yán)禁私自更改管理員密碼,否則,暫停計(jì)算機(jī)使用權(quán)1星期。
嚴(yán)禁于機(jī)房?jī)?nèi)使用磁化物品,如磁化水杯,否則,造成顯示器磁化現(xiàn)象照價(jià)賠償。
學(xué)員須保持室內(nèi)清潔衛(wèi)生,嚴(yán)禁吸煙,嚴(yán)禁隨地吐痰,亂丟雜物。
嚴(yán)禁在機(jī)房和教室用餐、吃零食。
嚴(yán)禁在機(jī)房和教室留宿。
第六部分違紀(jì)處理
違反上述任何條款的行為1次,情節(jié)輕微者,將被給予警告處理,同時(shí),須執(zhí)行上述有關(guān)條款已列出的違紀(jì)處理措施。
違反上述任何條款的行為3次,情節(jié)嚴(yán)重者或者累計(jì)違反上述任何條款2次,將被給予嚴(yán)重警告處理,同時(shí),須執(zhí)行上述有關(guān)條款已列出違紀(jì)處理措施。
累計(jì)違反上述任何條款4次,將被取消實(shí)習(xí)資格。除該種情況外,如下情況也將被取消實(shí)習(xí)資格:出現(xiàn)任何不尊重老師、同學(xué)之不文明行為 所有違紀(jì)行為記入學(xué)員檔案并向其所在學(xué)校反應(yīng)。
對(duì)于尋釁滋事、打架斗毆者,除按照上述4條措施處理外,因打架斗毆致人人身傷害者,須向受害者賠償各項(xiàng)損失。尋釁滋事、打架斗毆等惡劣行為對(duì)達(dá)內(nèi)造成不良影響的,達(dá)內(nèi)保留對(duì)相關(guān)人員采取法律措施和其他追究措施的權(quán)力。學(xué)員的任何違法違規(guī)行為,包括但不限于上述的尋釁滋事、打架斗毆等行為,所造成的學(xué)員本人或第三人的任何損失和傷害,達(dá)內(nèi)皆不承擔(dān)任何責(zé)任;給達(dá)內(nèi)造成的任何損失,達(dá)內(nèi)有權(quán)向該學(xué)員追償。
第四篇:北京達(dá)內(nèi)培訓(xùn)感受
來(lái)北京有兩個(gè)月了,感受真的很多,我是在北京達(dá)內(nèi)集團(tuán)學(xué)java,經(jīng)過(guò)這段時(shí)間的學(xué)習(xí),我不僅學(xué)到了java的核心技術(shù),更是看到了計(jì)算機(jī)行業(yè)的發(fā)展?fàn)顩r,看到了社會(huì)的發(fā)展速度和大城市的生活工作節(jié)奏,這是在學(xué)校不可能看到的也是不可能體會(huì)到的,現(xiàn)在很是后悔在學(xué)校沒有把握好時(shí)間學(xué)習(xí),下面說(shuō)說(shuō)我的感想吧。
首先,這里有非常濃厚的學(xué)習(xí)氛圍。這里能夠感受到社會(huì)上工作的壓力,來(lái)這里學(xué)習(xí)的同學(xué)不全是大學(xué)剛畢業(yè)或者是還沒有畢業(yè)的大學(xué)生,有很多是在工作幾年之后又回來(lái)學(xué)習(xí)的,可能他們也感覺社會(huì)在快速發(fā)展,自己也應(yīng)該多學(xué)點(diǎn)有用的知識(shí),以便更好地立足社會(huì)。俗話說(shuō)“活到老學(xué)到老”,這話一點(diǎn)不假,跟他們交流,我學(xué)到了很多。從他們身上我能感覺到壓力,能感覺到自己的不足,讓我感覺自己學(xué)習(xí)不再只是為了一場(chǎng)考試,而是今后工作和生活的實(shí)力與能力。大家深知社會(huì)競(jìng)爭(zhēng)激烈,都在拼命地學(xué)習(xí)。但是這并不影響我們之間相互討論和學(xué)習(xí),因?yàn)槲覀兊膶?duì)手不只是眼前的這些同學(xué),而是更多的你所不認(rèn)識(shí)的人,這也讓我看到了團(tuán)隊(duì)合作的重要性。所以說(shuō)學(xué)習(xí)其實(shí)是很快樂(lè)的,雖然很累很累,但是大家都知道其意義所在。
我們每天的學(xué)習(xí)時(shí)間很長(zhǎng)。早晨七點(diǎn)多起床,路遠(yuǎn)的同學(xué)要坐車去上課,從八點(diǎn)半到中午連續(xù)不斷地上課,中午休息一個(gè)多小時(shí),下午上課到五點(diǎn),然后上自習(xí)到七點(diǎn),才去吃飯,大多數(shù)人晚飯后會(huì)回來(lái)一直學(xué)習(xí)到晚上九點(diǎn)多,這就是我們的一天,天天如此。所以我感覺我們是飛速前進(jìn)的,我們?cè)趫?jiān)持中前進(jìn)!
我們的學(xué)習(xí)是職業(yè)性的培訓(xùn)。老師告訴我們,我們的學(xué)習(xí)不再是teaching,而是貨真價(jià)實(shí)的training。是的,我們?cè)诓粩嗟赜?xùn)練,練習(xí)將來(lái)工作中真正能用的技術(shù)。都說(shuō)現(xiàn)在找工作難,那是那些沒有真正技術(shù)的人給自己的借口和自我安慰。我們?cè)谶@里學(xué)的很多很多,從技術(shù)上來(lái)說(shuō),我們學(xué)習(xí)java核心技術(shù)、linux操作系統(tǒng)、oracle數(shù)據(jù)庫(kù)、jdbc數(shù)據(jù)庫(kù)連接技術(shù)、xml技術(shù)、java web、java script等等;我們會(huì)使用集成框架spring等做出很多商業(yè)軟件??在學(xué)到這么多有用的知識(shí)之后,誰(shuí)還會(huì)沒有信心找到工作呢!當(dāng)你在自己的簡(jiǎn)歷上寫上你擁有如此多的技術(shù),曾經(jīng)做過(guò)項(xiàng)目,已經(jīng)有了相當(dāng)多的工作經(jīng)驗(yàn),有哪個(gè)公司會(huì)不錄用這樣的人才!但是有一個(gè)前提:在培訓(xùn)過(guò)程中,必須要堅(jiān)持,因?yàn)椴皇且话愕睦?,時(shí)刻告訴自己:加油!
由于時(shí)刻在學(xué)習(xí)中,所以對(duì)于學(xué)習(xí)有著說(shuō)不完的話。下面再談一些生活上的感受吧。大家都知道,在北京住房是很大的問(wèn)題,但是我卻從沒想過(guò)會(huì)有這么困難。剛來(lái)的那會(huì)兒非常不適應(yīng),在大學(xué)宿舍五百塊錢能住一年,但是在這里五百塊只能在地下室住一個(gè)月,面對(duì)這么大的壓力,誰(shuí)會(huì)不努力學(xué)習(xí)呢!我們?cè)?jīng)在電視上看見過(guò)早晨上班一族擠公交車和地鐵的場(chǎng)面,但是真的經(jīng)歷過(guò)了才能知道,這是多么的痛苦!也能體會(huì)到壓力。但是就是在競(jìng)爭(zhēng)最激烈的地方才會(huì)煥發(fā)人的潛能,只要肯努力,就一定會(huì)有收獲的!
這是我來(lái)北京參加培訓(xùn)的一點(diǎn)點(diǎn)感受。對(duì)于選擇到北京達(dá)內(nèi)來(lái)學(xué)習(xí),我認(rèn)為這是一個(gè)很正確的選擇,不是說(shuō)出來(lái)培訓(xùn)就會(huì)找到好的工作,而是只要抱著一種上進(jìn)的學(xué)習(xí)的心態(tài),一直努力,找工作就像順藤摸瓜一樣,你的學(xué)習(xí)道路就是瓜藤,而學(xué)習(xí)的小盡頭也就是滿意的工作了。其實(shí)一份滿意的工作不只是為了拿薪水,而是實(shí)現(xiàn)自己的價(jià)值,自己用自己的知識(shí)在自己喜歡的崗位上做自己喜歡的工作,這難道不是一件很好的事情嗎?
IT行業(yè)是當(dāng)今社會(huì)的熱門行業(yè),說(shuō)它熱門是因?yàn)樗陌l(fā)展?jié)摿κ菬o(wú)窮的,所以我們能進(jìn)入到這個(gè)行業(yè)是一種幸運(yùn)。可是我們?cè)诖髮W(xué)里面甚至連半只腳都沒有邁進(jìn)IT的門檻,隨著知識(shí)的增多,隨著對(duì)專業(yè)技術(shù)由點(diǎn)到線,由線到面的了解,我對(duì)這個(gè)行業(yè)就有了很深入的認(rèn)識(shí)。這也是給大家的一個(gè)建議,永遠(yuǎn)不要想著知道全面的概況之后才去學(xué)每個(gè)點(diǎn),而要從最小的點(diǎn)開始拓展開去,這樣才能取得進(jìn)步,所以在學(xué)?;A(chǔ)知識(shí)的學(xué)習(xí)也非常重要!
最后送大家一句話:相信自己沒有選錯(cuò)行業(yè),相信自己有立足的能力,為自己制定明確的目標(biāo),然后努力地去學(xué)習(xí)、體會(huì)、感悟、進(jìn)步!
第五篇:達(dá)內(nèi)學(xué)習(xí)心得:俄羅斯方塊項(xiàng)目總結(jié)
達(dá)內(nèi)學(xué)員:我的俄羅斯方塊項(xiàng)目總結(jié)
獲獎(jiǎng)學(xué)員:陳啟壯 所獲獎(jiǎng)項(xiàng):三等獎(jiǎng) 內(nèi)容
俄羅斯方塊一共三個(gè)類中間用等號(hào)隔開 軟件的開發(fā)過(guò)程 明確業(yè)務(wù)需求
用自然語(yǔ)言,將業(yè)務(wù)功能描述清楚
...2 業(yè)務(wù)分析
找到有哪些業(yè)務(wù)對(duì)象,和圖片的分析
tetris(俄羅斯方塊)
|-- score 累計(jì)分?jǐn)?shù)
|-- lines 銷毀的行數(shù)
|-- Wall(墻 20行x10列)
|-- 20row(行)
|--10 col cell(列)
|-- tetromino(4格方塊,有7種形態(tài))
|-- 4 cell
|--nextOne 下一個(gè)準(zhǔn)備下落的方塊
|-- 4 cell 數(shù)據(jù)模型,一切業(yè)務(wù)對(duì)象轉(zhuǎn)換為數(shù)字表示
場(chǎng)地按照行列劃分為20x10格子
格子有屬性row,col,color 4 類 設(shè)計(jì)
Tetris
|--int score
|--int lines
|--Cell[20][10] wall
|--Tetromino tetromino
|
|--Cell[4] cells
|--row
|--col
|--color 5 算法設(shè)計(jì),就是如何利用數(shù)據(jù)的計(jì)算實(shí)現(xiàn)軟件的功能
4格方塊的初始形態(tài): I S Z J L T O
就在初始數(shù)據(jù)的數(shù)值狀態(tài)設(shè)計(jì)
四格方塊的下落計(jì)算:就是將每個(gè)格子的row+1
就是將下落的業(yè)務(wù)功能,轉(zhuǎn)換為數(shù)字計(jì)算實(shí)現(xiàn)
左右移動(dòng)
下落流程控制:控制方塊下落與墻之間的控制關(guān)系
1 合理的文字流程描述
2 分析文字描述中的功能(動(dòng)作)為方法
3 用流程控制語(yǔ)句連接方法實(shí)現(xiàn)功能 嚴(yán)格測(cè)試結(jié)果?。詄stCase 左右移動(dòng)流程控制
分?jǐn)?shù)計(jì)算
界面的繪制
鍵盤事件控制
旋轉(zhuǎn)流程控制
加速下降流程控制
開始流程控制(Timer)
暫停流程控制
繼續(xù)流程控制
結(jié)束流程控制
首先是Cell類,最基本的類包含3個(gè)私有屬性和get,set方法,重寫Object類的toString輸出方法,并規(guī)定格子所具有的3個(gè)移動(dòng)功能 package com.tarena.tetris;//包:小寫英文字母,域名倒寫.項(xiàng)目名 /** * 最小的格子
*/ public class Cell{
private int row;
private int col;
private int color;
public Cell(int row, int col, int color){
super();
this.row = row;
this.col = col;
this.color = color;
}
public int getCol(){
return col;
}
public void setCol(int col){
this.col = col;
}
public int getColor(){
return color;
}
public void setColor(int color){
this.color = color;
}
public int getRow(){
return row;
}
public void setRow(int row){
this.row = row;
}
public void left(){
col--;
}
public void right(){
col++;
}
public void drop(){
row++;
}
public String toString(){
return row+“,”+col;
} } =============================================================== package com.tarena.tetris;import java.util.Arrays;import java.util.Timer;import java.util.TimerTask;
import javax.swing.JPanel;//是能夠顯示的矩形面板區(qū)域 import javax.swing.JFrame;//窗口框
import javax.swing.border.LineBorder;//實(shí)現(xiàn)邊框 import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.event.KeyAdapter;import java.awt.event.KeyListener;import java.awt.event.KeyEvent;/* * 俄羅斯方塊類
* 俄羅斯方塊 擴(kuò)展了(extends)系統(tǒng)的顯示面板,增加了墻和
* 正在下落的方塊
* */ public class Tetris extends JPanel{
public static final int ROWS = 20;
public static final int COLS= 10;
/*代表方塊下落著陸的墻*/
private Cell[][] wall = new Cell[ROWS][COLS];
/*是正在下落的方塊*/
private Tetromino tetromino;
/*下一個(gè)進(jìn)入的方塊*/
private Tetromino nextOne;
private static int score;
private int lines;
Timer timer;
private boolean gameOver = false;
private boolean pause = false;//暫停
private static final int[] SCORE_LEVEL={0,1,4,10,100};
private static final Graphics Graphics = null;
/*銷毀(destory)滿行*/
//
0 1 2 3 4
/*在Tetris中添加方法,檢查游戲是否結(jié)束*/
public void rotateRightAction(){
tetromino.rotateRight();
if(outOfBounds()||coincide()){
tetromino.rotateLeft();
}
}
public void rotateLeftAction(){
tetromino.rotateLeft();
if(outOfBounds()||coincide()){
tetromino.rotateRight();
}
}
/*在Tetris中添加方法,檢查游戲是否結(jié)束*/
private boolean gameOver(){
gameOver = wall[0][4]!=null;
return gameOver;
}
/*在Tetris中添加方法*/
public void hardDropAction(){
while(canDrop()){
tetromino.softDrop();
}
tetrominoLandToWall();
destroy();
if(gameOver()){
gameOverAction();
}
nextTetromino();
}
public void destroy(){
int lines = 0;//統(tǒng)計(jì)本次銷毀的行數(shù)
for(int row = 0;row Cell[] line = wall[row]; if(fullCell(line)){ clearLine(row,wall); lines++;//每消除一行就累計(jì)加1 } } score += SCORE_LEVEL[lines]; this.lines +=lines; } public static void clearLine(int row,Cell[][] wall){ for(int i=row;i>1;i--){ System.arraycopy(wall[i-1],0,wall[i],0,wall[i].length); } Arrays.fill(wall[0],null); } public static boolean fullCell(Cell []line){ for(int col = 0;col if(line[col]==null){ return false;//找到空格子,這行沒有滿 } } return true; } public String toString(){//顯示全部的墻 String str = “"; for(int row = 0;row Cell[] line = wall[row]; for(int col = 0;col Cell cell = line[col]; if(tetromino.contains(row,col)){ str +=row+”,“+col+” “; }else{ str = str + cell + ” “; } } str +=”n“; } return str; } /*4格方塊下降流程 * 方塊移動(dòng)到區(qū)域最下方或是著地到其他方塊上無(wú)法移動(dòng)時(shí),* 就會(huì)固定到該處,而新的方法快出現(xiàn)在區(qū)域上方開始下落。 * 如果能下降就繼續(xù)下降,* 否則就著陸到墻上,并且生成(隨機(jī))下一個(gè)方塊 * */ public void softDropAction(){ if(canDrop()){//如果能下降 tetromino.softDrop();//方塊繼續(xù)下降 }else{ tetrominoLandToWall();//著陸到墻上 destroy();// if(gameOver()){ gameOverAction(); } nextTetromino();//生產(chǎn)(隨機(jī))下一個(gè)方塊 } } private void startGameAction(){ gameOver = false; pause = false; score = 0; lines = 0; emptyWall(); nextTetromino(); repaint(); timer = new Timer(); timer.schedule(new TimerTask(){ public void run(){ softDropAction(); repaint(); } }, 500, 500); } private void emptyWall(){ for(int row=0;row Arrays.fill(wall[row],null); } } /*清理游戲結(jié)束現(xiàn)場(chǎng),如:停止定時(shí)器等*/ private void gameOverAction(){ timer.cancel();//停止定時(shí)器 } /*檢查 方塊 是否能夠繼續(xù)下落:到底最低部,或者墻上 * 的下方有方塊,返回false不能下降,返回true可以下降 * */ public boolean canDrop(){ //檢查到底部 Cell[] cells = tetromino.getCells(); for(Cell cell:cells){ if(cell.getRow()==ROWS-1){ return false; } } //檢查墻上下方是否有方塊 for(Cell cell:cells){ int row = cell.getRow(); int col = cell.getCol(); Cell block = wall[row+1][col]; if(block!=null){ return false; } } return true; } /*方塊“著陸”到墻上,* 取出每個(gè)小cell * 找到cell的行號(hào)row和列號(hào)col * 將cell放置到wall[row][col]位置上 * */ public void tetrominoLandToWall(){ Cell[] cells = tetromino.getCells(); for(Cell cell:cells){ int row = cell.getRow(); int col = cell.getCol(); wall[row][col] = cell; } } /*生產(chǎn)(隨機(jī))下一個(gè)方塊 * 1 下一個(gè)變?yōu)楫?dāng)前的* 2 隨機(jī)產(chǎn)生下一個(gè) * */ public void nextTetromino(){ if(nextOne==null){//第一次nextOne是null時(shí)候先生產(chǎn)一個(gè) nextOne = Tetromino.randomTetromino(); } tetromino = nextOne;//下一個(gè)變?yōu)楫?dāng)前的 nextOne = Tetromino.randomTetromino();//隨機(jī)產(chǎn)生下一個(gè) if(tetromino==null){//處理第一次使用時(shí)候下一個(gè)是null tetromino=Tetromino.randomTetromino(); } } /*以格子為單位左右移動(dòng)方塊 * 1)如果遇到左右邊界就不能移動(dòng)了 * 2)如果與墻上的格子相撞就不能移動(dòng)了 * 變通為: * 1)先將方塊左移動(dòng),* 2)檢查(移動(dòng)結(jié)果是否出界),或者(重合) * 3)如果檢查失敗,就右移的回來(lái) * * */ public void moveLeftAction(){ tetromino.moveLeft(); if(outOfBounds()|| coincide()){ tetromino.moveRight(); } } private boolean outOfBounds(){ Cell[] cells = tetromino.getCells(); for(int i = 0;i < cells.length;i++){ Cell cell = cells[i]; int row = cell.getRow(); int col = cell.getCol(); if(row == ROWS||col<0||col>=COLS){ return true; } } return false; } private boolean coincide(){ Cell[] cells = tetromino.getCells(); for(int i = 0;i < cells.length;i++){ Cell cell = cells[i]; int row = cell.getRow(); int col = cell.getCol(); if(row >0&&row &&wall[row][col]!=null){ return true;//重合 } } return false; } public void moveRightAction(){ tetromino.moveRight(); if(outOfBounds()|| coincide()){ tetromino.moveLeft(); } } public static final int CELL_SIZE = 25; /*在Tetris.java中添加main方法 作為軟件的啟動(dòng)方法*/ public static void main(String []args){ JFrame frame = new JFrame(”俄羅斯方塊“); int wigth =(COLS+8)*CELL_SIZE +100; int height =ROWS*CELL_SIZE +100; frame.setSize(wigth,height); frame.setLocationRelativeTo(null);//居中 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設(shè)置關(guān)閉窗口就關(guān)閉軟件 frame.setLayout(null);//取消默認(rèn)布局,取消自動(dòng)充滿 Tetris panel = new Tetris(); panel.setLocation(45,25); panel.setSize((COLS+8)*CELL_SIZE,ROWS*CELL_SIZE); panel.setBorder(new LineBorder(Color.black)); frame.add(panel);//窗口中添加面板 frame.setVisible(true);//顯示窗口時(shí)候調(diào)用paint() panel.action(); } /*動(dòng)作方法,這里是讓軟件開始動(dòng)作,*/ public void action(){ //wall[18][2] = new Cell(18,2,0xff0000); startGameAction(); //重繪方法->盡快調(diào)用paint() //startGameAction(); //this 是當(dāng)前Tetris面板 this.requestFocus();//為當(dāng)前面板請(qǐng)求獲得輸入焦點(diǎn) //this對(duì)象就獲得了輸入焦點(diǎn),以后任何的 //鍵盤輸入(包括左右方向鍵)目標(biāo)就是這個(gè)面板對(duì)象了! //addKeyLIstener添加鍵盤監(jiān)聽,監(jiān)聽那些按鍵輸入了 this.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ int key = e.getKeyCode();//key按鍵 if(gameOver){ if(key==KeyEvent.VK_S){ startGameAction();//啟動(dòng)游戲開始流程 } return; } if(pause){ if(key==KeyEvent.VK_C){ continueAction(); }return; } //System.out.println(”Type:“+e.getKeyCode()); switch(key){ case KeyEvent.VK_RIGHT :moveRightAction();break; case KeyEvent.VK_LEFT :moveLeftAction();break; case KeyEvent.VK_DOWN :softDropAction();break; case KeyEvent.VK_UP :rotateRightAction();break; case KeyEvent.VK_SPACE :hardDropAction();break; case KeyEvent.VK_P :pasueAction();break; } //按鍵->方塊移動(dòng)方法->改變方塊數(shù)據(jù)->repaint() //->盡快調(diào)用paint()->利用新數(shù)據(jù)繪制 repaint(); } private void continueAction(){ pause = false; timer = new Timer(); timer.schedule(new TimerTask(){ public void run(){ softDropAction(); repaint(); } }, 500, 500); } private void pasueAction(){ pause = true; timer.cancel(); } }); } //JPanel 類利用paint(涂畫)方法繪制界面 //子類重寫paint方法可以修改繪圖邏輯 public static final int BORDER_COLOR = 0x667799; public static final int BG_COLOR = 0xC3D5EA; public static final int FONT_COLOR = 0; public void paint(Graphics g){ //g 代表綁定在當(dāng)前面板上的畫筆 //利用畫筆在當(dāng)前 面板上 繪制了一串字符! paintBackground(g);//填充背景 paintWall(g);//繪制墻 paintTetromino(g);//繪制當(dāng)前方塊 paintNextOne(g);//繪制下一個(gè)方塊 paintScore(g);//繪制分?jǐn)?shù) paintTetrisBorder(g);//繪制邊線 } private void paintScore(Graphics g){ int x = 12 * CELL_SIZE; int y = 5 * CELL_SIZE; Font font = new Font(getFont().getName(),Font.BOLD,25); String str = ”分?jǐn)?shù): “+score; g.setColor(new Color(FONT_COLOR)); g.setFont(font); g.drawString(str, x, y); y+=2*CELL_SIZE; str = ”行數(shù): “+lines; g.drawString(str, x, y); if(gameOver){ str = ”(T_T)![s]再來(lái)!“; y+=2*CELL_SIZE; g.drawString(str, x, y); } if(pause){ str = ”[c]繼續(xù)!“; y+=2*CELL_SIZE; g.drawString(str, x, y); }else{ str = ”[p]暫停!"; y+=2*CELL_SIZE; g.drawString(str, x, y); } } private void paintNextOne(Graphics g){ if(nextOne==null)//如果沒有4格方塊就返回,不繪制 return; for(Cell cell : nextOne.getCells()){ int row = cell.getRow()+1; int col = cell.getCol()+9; int x = col*CELL_SIZE; int y = row*CELL_SIZE; g.setColor(new Color(cell.getColor())); g.fillRect(x, y, CELL_SIZE, CELL_SIZE); g.setColor(new Color(BORDER_COLOR)); g.drawRect(x, y, CELL_SIZE, CELL_SIZE); } } private void paintTetromino(Graphics g){ if(tetromino==null)//如果沒有4格方塊就返回,不繪制 return; for(Cell cell : tetromino.getCells()){ int row = cell.getRow(); int col = cell.getCol(); int x = col*CELL_SIZE; int y = row*CELL_SIZE; g.setColor(new Color(cell.getColor())); g.fillRect(x, y, CELL_SIZE, CELL_SIZE); g.setColor(new Color(BORDER_COLOR)); g.drawRect(x, y, CELL_SIZE, CELL_SIZE); } } private void paintWall(Graphics g){ for(int row = 0;row for(int col = 0;col < COLS;col++){ Cell cell = wall[row][col]; int x = col*CELL_SIZE; int y = row*CELL_SIZE; if(cell == null){ //g.setColor(new Color(BORDER_COLOR)); // g.drawRect(x, y,// CELL_SIZE, CELL_SIZE); }else{ g.setColor(new Color(cell.getColor())); g.fillRect(x, y,CELL_SIZE, CELL_SIZE); g.setColor(new Color(BORDER_COLOR)); g.drawRect(col*CELL_SIZE, row*CELL_SIZE,CELL_SIZE, CELL_SIZE); } } } } private void paintBackground(Graphics g){ g.setColor(new Color(BG_COLOR)); g.fillRect(0, 0, getWidth(), getHeight()); } private void paintTetrisBorder(Graphics g){ g.setColor(new Color(BORDER_COLOR)); g.drawRect(0, 0, CELL_SIZE*COLS, CELL_SIZE*ROWS-1); g.drawRect(CELL_SIZE*COLS,0,CELL_SIZE*8-1, CELL_SIZE*ROWS-1); } } =============================================================== package com.tarena.tetris;import java.util.Arrays;import java.util.Random;/* * 四格方塊類,有7種子類:I T S Z J L O * */ public abstract class Tetromino { public static final int I_COLOR =0xff6600; public static final int T_COLOR =0xffff00; public static final int S_COLOR =0x66ccff; public static final int Z_COLOR =0x00ff00; public static final int J_COLOR =0x0000ff; public static final int L_COLOR =0xcc00ff; public static final int O_COLOR =0xff0000; protected Cell[] cells = new Cell[4]; /*四格方塊的下落,是四個(gè)格子一起下落*/ public void softDrop(){ for(int i = 0;i cells[i].drop(); } } /*向左移動(dòng)一步*/ public void moveLeft(){ for(int i = 0;i Cell cell = cells[i];//引用賦值 cell.left(); } } public void moveRight(){ //增強(qiáng)for循環(huán),是傳統(tǒng)數(shù)組迭代的“簡(jiǎn)化版本”,//也稱為foreach循環(huán)(foreach迭代)(java 5以后) for(Cell cell:cells){//底層實(shí)現(xiàn)就是經(jīng)典迭代 cell.right(); } } public Cell[] getCells(){ return cells; } protected Offset[] states;//旋轉(zhuǎn)的狀態(tài) protected class Offset{ int row0,col0; int row1,col1; int row2,col2; int row3,col3; public Offset(int row0, int col0, int row1,int col1, int row2, int col2,int row3, int col3){ this.row0 = row0; this.col0 = col0; this.row1 = row1; this.col1 = col1; this.row2 = row2; this.col2 = col2; this.row3 = row3; this.col3 = col3; } } private int index = 10000-1; /*向右轉(zhuǎn)*/ public void rotateRight(){ index++; Offset offset = states[index%states.length]; Cell axis = cells[0];//找到軸(axis)的位置 cells[0].setRow(offset.row0+axis.getRow()); cells[0].setCol(offset.col0+axis.getCol()); cells[1].setRow(offset.row1+axis.getRow()); cells[1].setCol(offset.col1+axis.getCol()); cells[2].setRow(offset.row2+axis.getRow()); cells[2].setCol(offset.col2+axis.getCol()); cells[3].setRow(offset.row3+axis.getRow()); cells[3].setCol(offset.col3+axis.getCol()); } public void rotateLeft(){ index--; Offset offset = states[index%states.length]; Cell axis = cells[0];//找到軸(axis)的位置 cells[0].setRow(offset.row0+axis.getRow()); cells[0].setCol(offset.col0+axis.getCol()); cells[1].setRow(offset.row1+axis.getRow()); cells[1].setCol(offset.col1+axis.getCol()); cells[2].setRow(offset.row2+axis.getRow()); cells[2].setCol(offset.col2+axis.getCol()); cells[3].setRow(offset.row3+axis.getRow()); cells[3].setCol(offset.col3+axis.getCol()); } /*隨機(jī)生成一個(gè)具體方法*/ public static Tetromino randomTetromino(){ Random random = new Random(); int type = random.nextInt(7);//0~6 switch(type){ case 0:return new I(); case 1:return new T(); case 2:return new S(); case 3:return new J(); case 4:return new Z(); case 5:return new L(); case 6:return new O(); } return null; } public String toString(){ return Arrays.toString(cells); } public boolean contains(int row, int col){ for(int i =0;i Cell cell = cells[i]; if(cell.getRow()==row && cell.getCol()==col){ return true; } } return false; } } class I extends Tetromino{ public I(){ cells[0] = new Cell(0,4,I_COLOR); cells[1] = new Cell(0,3,I_COLOR); cells[2] = new Cell(0,5,I_COLOR); cells[3] = new Cell(0,6,I_COLOR); states = new Offset[]{ new Offset(0,0,-1,0,1,0,2,0),new Offset(0,0,0,-1,0,1,0,2),}; } } class T extends Tetromino{ public T(){ cells[0] = new Cell(0,4,T_COLOR); cells[1] = new Cell(0,3,T_COLOR); cells[2] = new Cell(0,5,T_COLOR); cells[3] = new Cell(1,4,T_COLOR); states = new Offset[]{ new Offset(0,0,1,0,-1,0,0,1),new Offset(0,0,0,-1,0,1,1,0),new Offset(0,0,1,0,-1,0,0,-1),new Offset(0,0,0,1,0,-1,-1,0),}; } } class S extends Tetromino{ public S(){ cells[0] = new Cell(0,4,S_COLOR); cells[1] = new Cell(0,5,S_COLOR); cells[2] = new Cell(1,3,S_COLOR); cells[3] = new Cell(1,4,S_COLOR); states = new Offset[]{ new Offset(0,0,-1,0,1,1,0,1),new Offset(0,0,0,1,1,-1,1,0),}; } } class Z extends Tetromino{ public Z(){ cells[0] = new Cell(0,4,Z_COLOR); cells[1] = new Cell(0,3,Z_COLOR); cells[2] = new Cell(1,4,Z_COLOR); cells[3] = new Cell(1,5,Z_COLOR); states = new Offset[]{ new Offset(0,0,-1,1,0,1,1,0),new Offset(0,0,-1,-1,-1,0,0,1),}; } } class J extends Tetromino{ public J(){ cells[0] = new Cell(0,4,J_COLOR); cells[1] = new Cell(0,3,J_COLOR); cells[2] = new Cell(0,5,J_COLOR); cells[3] = new Cell(1,5,J_COLOR); states = new Offset[]{ new Offset(0,0,-1,0,1,0,1,-1),new Offset(0,0,0,1,0,-1,-1,-1),new Offset(0,0,1,0,-1,0,-1,1),new Offset(0,0,0,-1,0,1,1,1),}; } } class L extends Tetromino{ public L(){ cells[0] = new Cell(0,4,L_COLOR); cells[1] = new Cell(0,3,L_COLOR); cells[2] = new Cell(0,5,L_COLOR); cells[3] = new Cell(1,3,L_COLOR); states = new Offset[]{ new Offset(0,0,-1,0,1,0,-1,-1),new Offset(0,0,0,1,0,-1,-1,1),new Offset(0,0,1,0,-1,0,1,1),new Offset(0,0,0,-1,0,1,1,-1),}; } } class O extends Tetromino{ public O(){ cells[0] = new Cell(0,4,O_COLOR); cells[1] = new Cell(0,5,O_COLOR); cells[2] = new Cell(1,4,O_COLOR); cells[3] = new Cell(1,5,O_COLOR); states = new Offset[]{ new Offset(0,0,0,1,1,0,1,1),new Offset(0,0,0,1,1,0,1,1),}; } }