Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
擊查看打磚塊游戲
動態的圖有點丟幀,所以看起來很難受,實際效果可以,可以用左鍵和右鍵,也可以用鼠標控制!現在這樣的小游戲一般都是基于HTML5/canvas畫布來做的,這個也不例外,當然核心的還是javascript的控制,這里的代碼量正好是200行,絕大部分是javascript來處理各種事件,包括核心的碰撞事件的檢測以及響應,我們小時候玩的小游戲一般邏輯思維都很簡單,但是具體用javascript去實踐的時候,那必須有比較扎實的基礎才可以,我一直建議學習前端的伙伴,把原生javascript學好,在現在的前端市場,原生javascript已經越來越重要!需要更多前端學習視頻或者資料的可以去我前面的文章找喲,以下附上本項目的源碼!
代碼過長需要文檔版源碼來我的前端群570946165,已上傳到群文件
HTML5/javascript代碼量有點大,所以只能以動圖的格式發送,請見諒,有需要的的可以加一下!
扣 554. 磚墻
題目描述
你的面前有一堵矩形的、由 n 行磚塊組成的磚墻。這些磚塊高度相同(也就是一個單位高)但是寬度不同。每一行磚塊的寬度之和相等。
你現在要畫一條 自頂向下 的、穿過 最少 磚塊的垂線。如果你畫的線只是從磚塊的邊緣經過,就不算穿過這塊磚。你不能沿著墻的兩個垂直邊緣之一畫線,這樣顯然是沒有穿過一塊磚的。
給你一個二維數組 wall ,該數組包含這堵墻的相關信息。其中,wall[i] 是一個代表從左至右每塊磚的寬度的數組。你需要找出怎樣畫才能使這條線 穿過的磚塊數量最少 ,并且返回 穿過的磚塊數量。
示例 1:
輸入:wall = [[1,2,2,1],[3,1,2],[1,3,2],[2,4],[3,1,2],[1,3,1,1]]
輸出:2
示例 2:
輸入:wall = [[1],[1],[1]]
輸出:3
提示:
解決方案
思路及算法
由于磚墻是一面矩形,所以對于任意一條垂線,其穿過的磚塊數量加上從邊緣經過的磚塊數量之和是一個定值,即磚墻的高度。
因此,問題可以轉換成求「垂線穿過的磚塊邊緣數量的最大值」,用磚墻的高度減去該最大值即為答案。
雖然垂線在每行至多只能通過一個磚塊邊緣,但是每行的磚塊邊緣也各不相同,因此我們需要用哈希表統計所有符合要求的磚塊邊緣的數量。
注意到題目要求垂線不能通過磚墻的兩個垂直邊緣,所以磚墻兩側的邊緣不應當被統計。因此,我們只需要統計每行磚塊中除了最右側的磚塊以外的其他磚塊的右邊緣即可。
具體地,我們遍歷磚墻的每一行,對于當前行,我們從左到右地掃描每一塊磚,使用一個累加器記錄當前磚的右側邊緣到磚墻的左邊緣的距離,將除了最右側的磚塊以外的其他磚塊的右邊緣到磚墻的左邊緣的距離加入到哈希表中。最后我們遍歷該哈希表,找到出現次數最多的磚塊邊緣,這就是垂線經過的磚塊邊緣,而該垂線經過的磚塊數量即為磚墻的高度減去該垂線經過的磚塊邊緣的數量。
C++
class Solution {
public:
int leastBricks(vector<vector<int>>& wall) {
unordered_map<int, int> cnt;
for (auto& widths : wall) {
int n = widths.size();
int sum = 0;
for (int i = 0; i < n - 1; i++) {
sum += widths[i];
cnt[sum]++;
}
}
int maxCnt = 0;
for (auto& [_, c] : cnt) {
maxCnt = max(maxCnt, c);
}
return wall.size() - maxCnt;
}
};
Java
class Solution {
public int leastBricks(List<List<Integer>> wall) {
Map<Integer, Integer> cnt = new HashMap<Integer, Integer>();
for (List<Integer> widths : wall) {
int n = widths.size();
int sum = 0;
for (int i = 0; i < n - 1; i++) {
sum += widths.get(i);
cnt.put(sum, cnt.getOrDefault(sum, 0) + 1);
}
}
int maxCnt = 0;
for (Map.Entry<Integer, Integer> entry : cnt.entrySet()) {
maxCnt = Math.max(maxCnt, entry.getValue());
}
return wall.size() - maxCnt;
}
}
C#
public class Solution {
public int LeastBricks(IList<IList<int>> wall) {
Dictionary<int, int> cnt = new Dictionary<int, int>();
foreach (IList<int> widths in wall) {
int n = widths.Count;
int sum = 0;
for (int i = 0; i < n - 1; i++) {
sum += widths[i];
if (!cnt.ContainsKey(sum)) {
cnt.Add(sum, 1);
} else {
cnt[sum]++;
}
}
}
int maxCnt = 0;
foreach (var entry in cnt) {
maxCnt = Math.Max(maxCnt, entry.Value);
}
return wall.Count - maxCnt;
}
}
JavaScript
var leastBricks = function(wall) {
const cnt = new Map();
for (const widths of wall) {
const n = widths.length;
let sum = 0;
for (let i = 0; i < n - 1; i++) {
sum += widths[i];
cnt.set(sum, (cnt.get(sum) || 0) + 1);
}
}
let maxCnt = 0;
for (const [_, c] of cnt.entries()) {
maxCnt = Math.max(maxCnt, c);
}
return wall.length - maxCnt;
};
Golang
func leastBricks(wall [][]int) int {
cnt := map[int]int{}
for _, widths := range wall {
sum := 0
for _, width := range widths[:len(widths)-1] {
sum += width
cnt[sum]++
}
}
maxCnt := 0
for _, c := range cnt {
if c > maxCnt {
maxCnt = c
}
}
return len(wall) - maxCnt
}
C
struct HashTable {
int key, val;
UT_hash_handle hh;
};
int leastBricks(int** wall, int wallSize, int* wallColSize) {
struct HashTable* cnt = NULL;
for (int i = 0; i < wallSize; i++) {
int n = wallColSize[i];
int sum = 0;
for (int j = 0; j < n - 1; j++) {
sum += wall[i][j];
struct HashTable* tmp;
HASH_FIND_INT(cnt, &sum, tmp);
if (tmp == NULL) {
tmp = malloc(sizeof(struct HashTable));
tmp->key = sum, tmp->val = 1;
HASH_ADD_INT(cnt, key, tmp);
} else {
tmp->val++;
}
}
}
int maxCnt = 0;
struct HashTable *iter, *tmp;
HASH_ITER(hh, cnt, iter, tmp) {
maxCnt = fmax(maxCnt, iter->val);
}
return wallSize - maxCnt;
}
復雜度分析
BY /
本文作者:力扣
聲明:本文歸“力扣”版權所有,如需轉載請聯系。
沒有幻想過以后當一名編程大師,往后成為一名工程師、前端或者后端開發人員?那么從小就需要對大腦鋪入編程的概念,今日小編特意為大家帶來了這款:scratch軟件,這是由麻省理工學院推出的專為少兒打造的一款圖形化編程軟件,是適合于全世界兒童學習編程和交流的工具和平臺。該平臺是通過其圖形化的界面將編程需要的基本技巧囊括其中,讓孩子可以在簡單的操作下快速掌握編程技巧。軟件擁有支持3D立體編輯、內置圖像穩定器以及靈活的用戶界面,便于用戶進行便捷的操作,除此之外:scratch軟件還提供了云端數據保存及作品分享社區,為用戶打造出了本地化的Scratch,同時支持代理模式,能很好的提高你的工作效率。
軟件功能
1、更勝一籌的4K編輯流程,支持Blackmagic Design的Deck?Link 4K Extreme,Ultra Studio 4K,AJA KONA 3G (僅預覽)非編硬件,支持使用Grass Valley HQX編碼的EDL或 AAF導入/導出,與DaVinci Resolve 11交換時間線校色流程
2、支持Blackmagic Design, Matrox 和 AJA的第三方板卡
3、混編多種分辨率素材-從24*24到4K*2K,在同一時間線實時轉換不同幀速率,為編輯人員提高了工作效率
4、支持當下最新的文件格式-SONY XAVCAM (Intra/ Long GOP)/XAVC S, Panasonic AVC-Ultra/AVC-Intra 4K 422及Canon XF-AVC(僅輸入)
5、源碼編輯多種視頻格式,包括: SONY XDCAM, Panasonic P2, Ikegami GF, RED, Canon XF 和 EOS 電影格式
6、當前最快的AVCHD編輯速度,可做到3層以上實時編輯
7、多達16機位的多機位編輯能力,并可實時進行視頻輸出
8、增強的MPEG和264/AVC編解碼能力(可對4K XAVC進行快速編碼),支持更快的4K H.264回放
9、基于第四代Intel酷睿架構的優化,支持Intel Quick Sync Video極速264輸出(用于藍光刻錄)
10、64位本地處理,快速處理海量靜態圖像文件(JPG, TGA, DPX等),提供更流暢的實時編輯
11、支持代理模式,增強PC處理能力,提高工作效率
12、靈活的用戶界面,包括:無限的視頻、音頻、字幕和圖文軌道
13、支持3D立體編輯、內置圖像穩定器,并可從時間線上直接刻錄藍光、DVD
軟件安裝
downkuai.com/soft/148284.html
使用教程
scratch怎么做游戲?怎樣在Scratch中編制打磚塊游戲?
一、創建角色
1、打開Scratch軟件,進入它的工作界面,將貓這個角色刪除;
2、用鼠標左鍵單擊“從角色庫中選取角色”,
3、創建球:在角色庫中選擇物品,選擇Baseball,確定
4、創建磚塊:用繪制角色的方法創建磚塊;
5、在角色Baseball上按鼠標右鍵,選擇info,出現角色的信息面板,顯示角色的名字,當前所在位置的坐標值,方向等;
6、將角色1名字改為氣球,改完按左邊的小箭頭返回角色列表,再將角色2改為磚塊;
二、編寫腳本
1、在角色面板點球,給它添加腳本;
2、在角色面板點磚塊,給它添加腳本;
3、復制磚塊,覆蓋上面的屏幕,我們發現復制磚塊的時候,腳本代碼也一起復制了,太好了!!
4、用同樣復制的方法再增加第二行磚塊,可以改變第二行磚塊的顏色,方法是選擇磚塊6,點中間的造型,選擇好顏色后用油漆桶工具改變填充色;復制磚塊,并將它們在第二行排列好;跟第一行一樣,我就不用再做了;
三、運行程序
點按綠旗開始運行,點按紅色按鈕停止執行。
scratch軟件常見問題
問:scratch怎么讓角色跳起來?
答:
1、運行打開scratch,然后選擇一個需要動起來的角色圖形。如下是該軟件自帶測試用的一個卡通角色。
2、選擇腳本處選擇可以讓角色動起來的指令。
3、最后用以下幾個指令,就可以讓角色動起來了。
4、小伙伴們還可以自己設定動起來的指令,只要你喜歡都可以。
問:scratch怎么讓角色跟著鼠標移動?
答:
1、首先我們需要運行打開scratch,然后需要準備一個角色(軟件已經幫我們備好一個默認角色了,使用這個就可以了,如果你有其他需要也可以進行替換)
2、然后我們選擇腳本處,選擇需要讓角色動起來的指令
3、再次選擇動作中的移到鼠標指針,將其拖拽出來
4、小編在這里選擇控制中的【重復執行】,將其拖拽至右側灰色處
5、最后將鼠標指針填入到重復執行中,如下效果:
6、根據教程操作完畢,單擊重復執行框就可以看到圖形在跟著鼠標的移動動起來了
軟件特色
1、scratch是中文語言,方便所有國內用戶使用;
2、構成程序的命令和參數通過基本形狀的模塊來實現;
3、用鼠標拖動模塊到程序編輯欄就可以了;
4、中間的部分是編輯好的程序代碼;
5、左邊是可以用來選擇的功能模塊;
6、右邊上部是程序預覽和運行窗口;
7、scratch中文版右邊下部是角色窗口;
*請認真填寫需求信息,我們會在24小時內與您取得聯系。