Module:Sandbox/Pelagic/01

-- Baby steps with Scribunto and Lua

--[[ Things I'm unsure of or probably doing wrong: 
* Convention for per-user collections of modules, 
  could I use subpages like Module:Pelagic/Test01 ? 
* Haven't read the coding conventions yet. 
** Caps? camelCase? underscores?
* Existing general utility modules? (as opposed to template-specific modules)
]]

--[[ Annoyances:
* iOS keyboard automatically converts - - to —, 
  it would be nice to have a button to comment/uncomment a line. 
* Hardware keyboard on iOS types curly quotes not straight quotes. 
* Tap and drag on a touchscreen selects characters and 
  can't be used to fine-position cursor.
]]

--[[ Nice features:
* Editor starts next line at same indent level, 
  automatically outdents when you type "end".
]]

local p = {} -- initialize a table to hold the functions

function p.create_deck(from_number, to_number)
	local ranks = { 'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 
		'J', 'Q', 'K', 'A' } -- sequence (array) of rank strings
	local suits = { '♥', '♦', '♠', '♣' } -- same for suits
	local specials = { 'joker', 'joker' } -- two jokers
	local d = { } -- the deck
	-- mw.logObject(ranks)
	-- mw.log(table.concat(ranks,""))
	 
	-- default to a standard 52-card deck, aces low
	local a = from_number or 1
	local b = to_number or 13
	local step = 1
	if b == 14 and a == 1 then a = 2 end -- don't double up on aces
	if b < a then step = -1 end

	for r = a, b, step do
		for s = 1, 4 do
			c = ranks[r] .. suits[s] -- concat rank+suit
			-- mw.log(c)
			
			-- I was going to implement thedeck as a set
			-- d[c] = true -- insert the card in the deck
			-- but choosing a random card to draw was hard
			
			table.insert(d, c)
		end
	end
	-- mw.logObject(d)
	mw.log(table.concat(d,',')) -- This doesn't work with a set, 
	--  even if I set the strings as values.
	-- Looks like concat only works with sequences.
	return d
end
-- to-do: pass custom rank and suit and specials as params, pass params for start and end ranks
function p.create_deck_doc() 
	return [[
	create_deck() makes a deck of cards as a Lua sequence.
	from_number and to_number can be in the range 1 (low ace) to 14 (high ace).
	]]
end

function p.draw_card(deck)
	-- n = math.random(# deck)
	-- mw.log(n)
	-- c = table.remove(deck, n)
	-- mw.log(c)
	-- return c
	return table.remove(deck, math.random(# deck))
end

function p.draw_cards(deck, count)
	local cards = {}
	for i = 1, count do
		table.insert(cards,p.draw_card(deck))
	end
	return cards
end

function p.hand(number)
	math.randomseed(os.time())
	local d = p.create_deck()
	return p.draw_cards(d, number)
end

function p.hand_of_cards(frame)
	a=frame.args
	number = a["number"] or a[1]
	list_separator = a["list_separator"]
	return table.concat(p.hand(number), list_separator or ' ')
end

return p -- export the table

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.