Halo semuanya! Ide untuk artikel ini datang sebulan yang lalu, tetapi karena kesibukan di tempat kerja, waktu sangat kurang. Suatu malam di YouTube saya menemukan video tentang membuat game platform seni piksel. Dan kemudian saya teringat pelajaran ilmu komputer pertama saya di sekolah, di mana kami "menggambar BASIC" dan memainkan "huruf makan gagak".
Kata pengantar
Saat itu tahun 2000. Krisis 98 telah berakhir. Saya duduk di kelas 8 di sekolah lokal di kota kecil. Di awal tahun ajaran, sebuah acara kecil menanti semua orang - pelajaran ilmu komputer diperkenalkan. Banyak yang menganggap ini sebagai mata pelajaran lain yang perlu diajarkan, tetapi ada juga yang matanya berbinar. Saya termasuk yang terakhir.
Perlu dicatat bahwa meskipun ilmu komputer diperkenalkan, mereka lupa "memperkenalkan komputer baru" karena tidak ada uang untuk tujuan ini. Pada saat itu, sekolah kami dilayani oleh mesin yang dibuat di Uni Soviet - " Electronics MC 0511 " dan beberapa mesin yang sedikit lebih modern. Mereka bekerja hanya menurut hukum mereka sendiri, atau setelah kedatangan "Nikolai Vladimirovich" tertentu - seorang guru lokal.
"" - 26 , . . . , . , .
, , . - , , .
BufferedImage. , .
fun drawPixel(
x:Int, y:Int, red:Int, green:Int, blue: Int,
image: BufferedImage
) {
image.setRGB(x, y, Color(red,green,blue).rgb)
}
, . , - redRng, greenRng blueRng .
fun drawRandImage(
image: BufferedImage, stepSize: Int = 1,
redRng: Int = 255, greenRng: Int = 255, blueRng: Int = 255
) {
for(posX in 0 until image.width step stepSize){
for (posY in 0 until image.height step stepSize) {
val r = if (redRng <= 0) 0 else Random.nextInt(0, redRng)
val g = if (greenRng <= 0) 0 else Random.nextInt(0, greenRng)
val b = if (blueRng <= 0) 0 else Random.nextInt(0, blueRng)
drawPixel(posX, posY, r, g, b, image)
}
}
}
stepSize , .
- . . ImageIO. - , Thread.
fun writeImage(img: BufferedImage, file: String) {
val imgthread = Thread(Runnable {
ImageIO.write(img, File(file).extension, File(file))
})
try {
imgthread.start()
} catch (ex: Exception) {
ex.printStackTrace()
imgthread.interrupt()
}
}
, "" .
ArrayList<List<Int>>. "" drawTitle, "" drawPixel, "big pixel" .
fun drawTile(
startX: Int, startY: Int, size: Int,
red: Int, green: Int, blue: Int, image: BufferedImage
) {
for (posX in startX until startX+size) {
for (posY in startY until startY+size) {
drawPixel(posX,posY,red,green,blue,image)
}
}
}
. -. when 4 …
fun drawImage(pixels: ArrayList<List<Int>>, image: BufferedImage) {
pixels.forEachIndexed { posY, row ->
row.forEachIndexed { posX, col ->
when(col) {
1 -> drawTile(posX*10,posY*10,10,255,2,0,image)
2 -> drawTile(posX*10,posY*10,10,156,25,31,image)
3 -> drawTile(posX*10,posY*10,10,255,255,255,image)
else -> drawTile(posX*10,posY*10,10,23,0,44,image)
}
}
}
}
… , (1 = , 2 = -, 3 = , 4 = )
val map = arrayListOf(
listOf(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
listOf(0,0,0,1,1,1,0,0,0,1,2,2,0,0,0),
listOf(0,0,1,3,3,1,1,0,1,1,1,2,2,0,0),
listOf(0,1,3,3,1,1,1,1,1,1,1,1,2,2,0),
listOf(0,1,3,1,1,1,1,1,1,1,1,1,2,2,0),
listOf(0,1,1,1,1,1,1,1,1,1,1,1,2,2,0),
listOf(0,1,1,1,1,1,1,1,1,1,1,1,2,2,0),
listOf(0,0,1,1,1,1,1,1,1,1,1,2,2,0,0),
listOf(0,0,0,1,1,1,1,1,1,1,2,2,0,0,0),
listOf(0,0,0,0,1,1,1,1,1,2,2,0,0,0,0),
listOf(0,0,0,0,0,1,1,1,2,2,0,0,0,0,0),
listOf(0,0,0,0,0,0,1,2,2,0,0,0,0,0,0),
listOf(0,0,0,0,0,0,0,2,0,0,0,0,0,0,0),
listOf(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
)
... . "" .
, " " , - , . , , .
Excel
. JS (React JS), , JavaScript . - …
, Excel. - . . " " - , Apache POI - word, excel, pdf. , .
hex rgba, Color.
val toRGBA = { hex: String ->
val red = hex.toLong(16) and 0xff0000 shr 16
val green = hex.toLong(16) and 0xff00 shr 8
val blue = hex.toLong(16) and 0xff
val alpha = hex.toLong(16) and 0xff000000 shr 24
Color(red.toInt(),green.toInt(),blue.toInt(),alpha.toInt())
}
, .
fun getPixelColors(file: String, listName: String): ArrayList<List<String>> {
val table = FileInputStream(file)
val sheet = WorkbookFactory.create(table).getSheet(listName)
val rowIterator: Iterator<Row> = sheet.iterator()
val rowArray: ArrayList<Int> = ArrayList()
val cellArray: ArrayList<Int> = ArrayList()
while (rowIterator.hasNext()) {
val row: Row = rowIterator.next()
rowArray.add(row.rowNum)
val cellIterator = row.cellIterator()
while (cellIterator.hasNext()) {
val cell = cellIterator.next()
cellArray.add(cell.address.column)
}
}
val rowSize = rowArray.maxOf { el->el }
//...
//...
return pixelMatrix
}
( ). , , . .
, , . ...
val rows = sheet.lastRowNum
val cells = sheet.getRow(rows).lastCellNum // + rows
val pixArray = Array(rows+1) {Array(ccc+1) {""} }
... OutOfBounds. (row) , , . , "", . iterator.hasNext(), .
- " " BufferedImage. , - TYPE_INT_ARGB, .
fun renderImage(pixels: ArrayList<List<String>>): BufferedImage {
val resultImage = BufferedImage(
pixels[0].size*10,
pixels.size*10,
BufferedImage.TYPE_INT_ARGB
)
pixels.forEachIndexed { posY, row ->
row.forEachIndexed { posX, col ->
drawTile(
(posX)*10,(posY)*10, 10,
toRGBA(col).red, toRGBA(col).green,toRGBA(col).blue,
toRGBA(col).alpha, resultImage
)
}
}
return resultImage
}
, .
github. ? svg, (blur, glitch, glow, etc..), “ ” , xls (HSSF Color) . - , , - .
, " " (ctrl+c, ctrl+v), "" . , : , , - " ". , , , .
14 , , .
Bahkan jika dalam beberapa tahun "MS Electronics" digantikan oleh rekan-rekan berbasis Pentium modern, pelajaran pertama di komputer lama itu akan selamanya tetap ada pada saya, karena merekalah yang menaruh kecintaan saya pada komputer dan semua yang terhubung dengannya ke dalam diri saya. ..
Bagaimana ilmu komputer dimulai di sekolah Anda?
Terimakasih untuk semua! Selamat tinggal semuanya!